[英]Sorting Array which is a Value in A Hash in Perl
我正在尝试对数组进行排序,该数组是哈希值 。 以下代码行:
sort @{ $hash{$item}{'lengths'} };
产生以下错误:
Useless use of sort in void context at ...
在Perl中, sort
不会修改数组; 它返回一个排序列表。 您必须在某处分配该列表(返回原始数组或其他位置)。
@{ $hash{$item}{'lengths'} } = sort @{ $hash{$item}{'lengths'} };
或者,(特别是如果数组深入嵌套哈希):
my $arrayref = $hash{$item}{'lengths'};
@$arrayref = sort @$arrayref;
您的原始代码正在对数组进行排序,然后丢弃已排序的列表,这就是它产生该警告的原因。
注意:正如salva指出的那样,默认情况下sort
会进行字符串比较。 你可能想要一个数字排序,你可以使用sort { $a <=> $b }
而不是sort
:
my $arrayref = $hash{$item}{'lengths'};
@$arrayref = sort { $a <=> $b } @$arrayref;
但这与您询问的警告信息无关。
另请注意,如果要对长度进行排序,则必须使用数字比较:
my $lengths = $hash{$item}{'lengths'};
@$lengths = sort { $a <=> $b } @$lengths;
我试过这样的事
my %lrn_hash;
$lrn_hash{1} = 1;
@{$lrn_hash{1}{VALS}} = (6,7,1,5,7,9);
@narr = sort @{$lrn_hash{1}{VALS}};
print "@narr\n";
它工作正常,输出是
1 5 6 7 7 9
您使用的perl版本是什么?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.