2009-08-13 61 views
0

我想找找哈希的最簡單的辦法值如何在數組散列的Perl散列中查找最小值?

City { 
    city1 -> Street1 -> [ high_street , 2] 
      street2 -> [ low_street , 2] 
    city2 -> Street1 -> [ high_street1 , 2] 
      street2 -> [ low_street2 , 2] 
    city3 -> Street1 -> [ high_street1 , 1] 
      street2 -> [ low_street2 , 1] 
} 

這種結構被分在一個哈希值。如何在第二級哈希中查找數組的第二個元素的最小值?

我期待我最小的價值是 - City3,street 1 - highstreet 1.這是基於最後一次只有價值的價值。但數組中的2個元素有1次。但我只想先了解第一個元素。

有什麼容易找到它嗎?

+0

根據什麼規模是城市3,街道1,高街1最小的價值?你可以通過Perl的'sort'對散列進行排序,甚至可以對散列進行復雜散列,但對於這樣的事情,你需要定義* sort函數應該如何評估項目。在這種情況下,「更小」和「更大」是什麼? – Telemachus 2009-08-13 10:52:56

+0

作爲一個開始,請參閱'perldoc -q sort',它將向您展示Perl常見問題排序中的一些條目。 – Telemachus 2009-08-13 10:54:08

+0

城市3,街道1,高街1最小值,因爲它得到'1'時間。而街道2也只有1次。但我只想要該數組的第一個元素 – Sam 2009-08-13 10:55:11

回答

2
my $City = { 
    city1 => { 
     Street1 => [ 'high_street', 2], 
     street2 => [ 'low_street', 2], 
    }, 
    city2 => { 
     Street1 => [ 'high_street1', 2], 
     street2 => [ 'low_street2', 2], 
    }, 
    city3 => { 
     Street1 => [ 'high_street1', 1], 
     street2 => [ 'low_street2', 1], 
    }, 
}; 

my $smallest_key1; 
my $smallest_key2; 
my $smallest_value; 
foreach my $key1 (keys %{$City}) { 
    foreach my $key2 (keys %{$City->{$key1}}) { 
     if(not defined $smallest_value or $City->{$key1}{$key2}[1] < $smallest_value) { 
      $smallest_key1 = $key1; 
      $smallest_key2 = $key2; 
      $smallest_value = $City->{$key1}{$key2}[1]; 
     } 
    } 
} 
print 'Smallest: ', $smallest_key1, ', ', $smallest_key2, ', ', join(', ', @{$City->{$smallest_key1}{$smallest_key2}}), "\n"; 
+2

有時你的閱讀能力會嚇倒我。 – innaM 2009-08-13 11:47:31

+0

謝謝,我會在這裏整整一週。提醒你的女服務員,她努力工作。 – chaos 2009-08-13 12:10:08