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