2010-12-09 29 views

回答

7

(這是official perlfaq answer,減去任何後續編輯)

有一對夫婦,你可以處理整個哈希方法。您可以獲得keys的列表,然後查看每個鍵,或一次獲取一個鍵值對。

要檢查所有的密鑰,請使用keys function。這將提取散列的所有密鑰並將它們作爲列表提供給您。然後,您可以打通特定鍵的值,你正在處理:

foreach my $key (keys %hash) { 
    my $value = $hash{$key} 
    ... 
    } 

一旦你有了密鑰列表中,您可以在處理哈希表元素之前處理該列表。或者

foreach my $key (sort keys %hash) { 
    my $value = $hash{$key} 
    ... 
    } 

,您可能希望只處理一些項目的:比如,你可以按鍵排序,所以你可以在詞法順序處理它們。如果你只想處理與文本啓動鍵:,您可以選擇只是那些用grep:

foreach my $key (grep /^text:/, keys %hash) { 
    my $value = $hash{$key} 
    ... 
    } 

如果哈希是非常大的,你可能不希望創建密鑰的一個長長的清單。爲了節省一些內存,你可以抓住使用each()一次在一個鍵值對,返回你還沒有見過一對:

while(my($key, $value) = each(%hash)) { 
    ... 
    } 

的每個操作員返回顯然隨機順序對,所以如果向你訂購事宜,你必須堅持使用鑰匙方法。

雖然each()運營商可能有點棘手。在使用它時,不能添加或刪除哈希鍵,而不能在Perl內部重新整理所有元素之後跳過或重新處理某些對。此外,散列只有一個迭代器,因此如果在同一散列上使用keys,valueseach,則可以重置迭代器並使處理變得困難。有關更多詳細信息,請參閱perlfunc中的each entry

相關問題