syk*_*ker 5 arrays sorting perl hash
我正在尝试对数组进行排序,该数组是哈希值.以下代码行:
sort @{ $hash{$item}{'lengths'} };
Run Code Online (Sandbox Code Playgroud)
产生以下错误:
Useless use of sort in void context at ...
Run Code Online (Sandbox Code Playgroud)
在Perl中,sort不修改数组; 它返回一个排序列表.您必须在某处分配该列表(返回原始数组或其他位置).
@{ $hash{$item}{'lengths'} } = sort @{ $hash{$item}{'lengths'} };
Run Code Online (Sandbox Code Playgroud)
或者,(特别是如果数组深入嵌套哈希):
my $arrayref = $hash{$item}{'lengths'};
@$arrayref = sort @$arrayref;
Run Code Online (Sandbox Code Playgroud)
您的原始代码正在对数组进行排序,然后丢弃已排序的列表,这就是它产生该警告的原因.
注意:正如salva指出的那样,默认情况下sort会进行字符串比较.你可能想要一个数字排序,你可以使用sort { $a <=> $b }而不仅仅是sort:
my $arrayref = $hash{$item}{'lengths'};
@$arrayref = sort { $a <=> $b } @$arrayref;
Run Code Online (Sandbox Code Playgroud)
但这与您询问的警告信息无关.
Rag*_*ram -2
我尝试过这样的事情
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";
Run Code Online (Sandbox Code Playgroud)
它工作得很好,输出是
1 5 6 7 7 9
Run Code Online (Sandbox Code Playgroud)
你使用的是哪个 Perl 版本?