繁体   English   中英

排序数组,它是Perl中Hash中的值

[英]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;

但这与您询问的警告信息无关。

Perl的排序不会“就地”重新排序列表。 它实际上是列表的副本,然后进行排序和返回。 这样做是因为cjm建议的,

你可以在这个链接上阅读类似的问题( 参见示例部分

另请注意,如果要对长度进行排序,则必须使用数字比较:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM