亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 3406 | 回復(fù): 16
打印 上一主題 下一主題

高級(jí)排序 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2013-04-22 13:32 |只看該作者 |倒序?yàn)g覽
被同事問起一個(gè)排序,感覺蠻有意思的,大家可以試試
源數(shù)據(jù)
  1. my @org = qw( acd 4 def 123 abc );
復(fù)制代碼
排序結(jié)果
  1. my @new = qw( 4 123 abc acd def );
復(fù)制代碼
規(guī)則:
1> 數(shù)字一定在字符串前;
2> 數(shù)字之間按照數(shù)字排序;
3> 字符串之間按ASCII碼排序。

論壇徽章:
6
卯兔
日期:2013-11-26 14:52:02丑牛
日期:2014-02-19 18:01:25卯兔
日期:2014-05-20 20:34:06白羊座
日期:2014-05-23 13:39:232015亞冠之大阪鋼巴
日期:2015-08-07 20:57:582015亞冠之大阪鋼巴
日期:2015-09-02 14:09:09
2 [報(bào)告]
發(fā)表于 2013-04-22 13:48 |只看該作者
sort就是這個(gè)機(jī)制吧

論壇徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2015-12-01 06:20:002015亞冠之首爾
日期:2015-11-04 22:25:43IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27獅子座
日期:2014-05-12 11:00:00辰龍
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-01-27 06:20:0015-16賽季CBA聯(lián)賽之新疆
日期:2016-06-07 14:10:01
3 [報(bào)告]
發(fā)表于 2013-04-22 13:49 |只看該作者
4abc 和 123d 按字符排?
那樣的話就是把數(shù)字和字符分開,分別排再拼起來就ok了

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2013-04-22 14:04 |只看該作者
回復(fù) 2# 只是一個(gè)紅薯


    不是的,sort是按照ASCII碼排序。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2013-04-22 14:06 |只看該作者
回復(fù) 3# laputa73


    額,我沒有給這種數(shù)據(jù),你想加可以加...可以按照字符排序。另外,你說的分開排序再合并的方法是可以的。我只是想看看有沒有其他方法,謝謝!

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2013-04-22 14:54 |只看該作者
自己寫一個(gè)比較函數(shù)就可以了
  1. my @org = qw/acd 4 def 123 abc/;
  2. my @new = sort {comp($a, $b)}  @org;


  3. sub comp {
  4.     my $a = shift;
  5.     my $b = shift;

  6.     if($a =~ /^\d+$/ && $b =~ /^\d+$/) {
  7.         return $a <=> $b;
  8.     }
  9.     elsif($a =~ /^\d+$/ && !($b =~ /^\d+$/)) {
  10.         return -1;
  11.     }
  12.     elsif(!($a =~ /^\d+$/) && $b =~ /^\d+$/) {
  13.         return 1;
  14.     }
  15.     else {
  16.         return $a cmp $b;
  17.     }
  18. }
復(fù)制代碼

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2013-04-22 15:22 |只看該作者
回復(fù) 6# shs867


    恩,不錯(cuò),這個(gè)方法也可行,謝謝!

論壇徽章:
2
射手座
日期:2014-10-10 15:59:4715-16賽季CBA聯(lián)賽之上海
日期:2016-03-03 10:27:14
8 [報(bào)告]
發(fā)表于 2013-04-22 15:48 |只看該作者
回復(fù) 1# kk861123
  1. @res = ((sort{$a <=> $b} grep{/^\d+$/}@org),(sort{$a cmp $b} grep {/^\D+$/}@org));
復(fù)制代碼

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2013-04-22 15:54 |只看該作者
回復(fù) 8# yinyuemi


    簡(jiǎn)潔!理論上和2L的差不多。我是用施瓦茨變換來做的:
  1. my @new = map { $_->[0] == 0 ? $_->[1] : $_->[2] }
  2.                 # number | char          number | number          char | char
  3.          sort { $a->[0] <=> $b->[0] or $a->[1] <=> $b->[1] or $a->[2] cmp $b->[2] }
  4.          map  { /^\d+$/ ? [ 0, $_, '' ] : [ 1, 0, $_ ] } @org;
復(fù)制代碼

論壇徽章:
3
CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
10 [報(bào)告]
發(fā)表于 2013-04-22 19:28 |只看該作者
  1. my @org = qw( 6 acd 4 def abc);
  2. my @new;
  3. map{ $_->[0]=~/(^\d+$)/?unshift@new,$1:push @new,$_->[0]}sort{
  4.    $b->[1]->[0] <=> $a->[1]->[0]
  5.                          }map{[$_,[/(\d+)/?$1:0]]}sort @org;
復(fù)制代碼
回復(fù) 1# kk861123
思路差不多{:3_195:}   施瓦茨轉(zhuǎn)化。。


   
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP