簡體   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