sort
他們先:
foreach my $key ( sort keys %hash) {
}
注:默認排序是按字母順序排列,而不是數字。但sort
將採取自定義功能,讓您按幾乎任何您關心的名字排序。
或者,捕獲數組中的排序並使用即來提取輸出順序。
my %content_for;
my @ordered_id;
while (<$input_filehandle>) {
my ($id, $content) = split;
push (@ordered_id, $id);
$content_for{$id} = $content;
}
print join ("\n", @content_for{@ordered_id}),"\n"
;
或者類似的東西有序散列機制像Hash::Ordered
或Tie::IxHash
。
我用迭代的方式提出了問題,但它可能不是對散列的迭代,而是非確定性的散列構建過程。我可以設置一些初始化以確定性和可複製的方式構建散列嗎?
不,哈希不起作用。有關說明,請參閱 - perlsec
。它得到了更隨機用Perl的新版本,但它一直是一個無序的數據結構。
你也許可以弄亂(如文章中提到的)PERL_HASH_SEED和PERL_PERTURB_KEYS,但這絕對不是一個好習慣。
PERL_HASH_SEED=0 ./somescript.pl
但是你應該記住,哈希排序仍不能保證承擔 - 按鍵的排序仍然可以改變。它會比以前更加一致。在生產中使用這絕對不是一件好事,或者除了調試之外都依賴它。
請注意:散列種子是敏感信息。哈希被隨機化以防範針對Perl代碼的本地和遠程攻擊。通過手動設置種子,這種保護可能會部分或完全丟失。
'該命令不需要人類可以預測'如何將鍵序列插入散列中? –
@Сухой27:沒問題,這個訂單和任何**固定訂單一樣好。 – jknappen