2009-08-13 18 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] 
} 

を発見する最も簡単な方法を見つけたいです。 2番目のレベルのハッシュ内で配列の2番目の要素の最小値を見つけるにはどうすればよいですか?

私の最小値はCity3、street1 - highstreet 1であると予想しています。これは一度だけ使用できる最後の値に基づいています。しかし、配列内の2つの要素は1回あります。しかし、私は最初の要素を最初に知りたいだけです。

見つけやすいですか?

+0

都市3、通り1、高所1の最小値によると、ハッシュのソートやハッシュの複雑なハッシュをPerlの 'sort'を使ってソートできますが、このような場合は' sort'関数がアイテムを評価する方法を定義する必要があります。この文脈では、「より小さい」とは何が「より大きい」とは何ですか? – Telemachus

+0

最初に 'perldoc -q sort'を見てください。これは、Perlのソートに関するよくある質問のエントリを表示します。 – Telemachus

+0

都市3、通り1、highstreet 1 '1'時間を得たので最小値。ストリート2も1回のみ。しかし、私はちょうどその配列の最初の要素にしたい – Sam

答えて

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

+0

ありがとう、私は一週間中ここにいます。あなたのウェイトレスをヒント、彼女は懸命に働く。 – chaos

関連する問題