+ -
当前位置:首页 → 问答吧 → 有个关于哈希的问题

有个关于哈希的问题

时间:2010-10-14

来源:互联网

for(sort { $DTQ{$b} <=> $DTQ{$a} } keys(%DTQ))
这个<=>及其左右哈希变量的用法,百思不得其解,求高手赐答!

作者: jayamge   发布时间: 2010-10-14

作者: py   发布时间: 2010-10-14

本帖最后由 wxlfh 于 2010-10-14 10:37 编辑


QUOTE:
for(sort { $DTQ{$b}  $DTQ{$a} } keys(%DTQ))
这个及其左右哈希变量的用法,百思不得其解,求高手赐答!
jayamge 发表于 2010-10-14 00:07




    对散列%DTQ的key按其值逆序排列。
举个例子:
  1. use strict;
  2. my %DTQ = (1=>'A',3=>'C',2=>'B');
  3. my @arr = sort {$DTQ{$b} cmp $DTQ{$a}} keys %DTQ;
  4. #现在@arr中的值为 3,2,1
复制代码

作者: wxlfh   发布时间: 2010-10-14

对了,你应该去看看 sort 的用法。

作者: wxlfh   发布时间: 2010-10-14

本帖最后由 珞水的大叔 于 2010-10-14 09:42 编辑

回复 wxlfh


    兄弟,你的代码里面有两个小瑕疵
    第二行应该是用小括弧赋值:
  1. my %DTQ = (1=>'A',3=>'C',2=>'B');
复制代码
第三行,因为sort比较的是value,而value是字符串不是数字,所以需要使用cmp而非<=>:
  1. my @arr = sort {$DTQ{$b} cmp $DTQ{$a}} keys %DTQ;
复制代码

作者: 珞水的大叔   发布时间: 2010-10-14

是用 cmp 还是 <=> 这个完全看需求啊,毕竟字符序和数字序不完全一样,况且他举的例子里面键全是数字,反正perl会自动转换的

作者: zhlong8   发布时间: 2010-10-14

本帖最后由 wxlfh 于 2010-10-14 10:36 编辑

回复 珞水的大叔


    对头,不是小瑕疵,而是大Bug。那个花括号吧,最近在看JavaScript的书,搞混了,悲哀啊。

谢谢指出错误,我疏忽了,误人子弟啊。

作者: wxlfh   发布时间: 2010-10-14

这倒也是

作者: 珞水的大叔   发布时间: 2010-10-14

热门下载

更多