ハッシュは、単一のキーと単一の値を持ち、各キーは一意である必要があります。あなたはこれを持って、あなたの元の問題では:
まあ
%hash = (
bob => "4.9",
gita =>"3.9 , 6,8",
diu => "3.0",
);
、gita
は、2つの値を持つことができません。また、ハッシュの2つのキーをgita
にすることはできません。したがって、単純なハッシュを使用して値を格納することはできません。
これを回避するには、参照を使用する方法があります。たとえば、ハッシュの各要素にはreference to an arrayを含めることができます。したがって、あなたのデータ構造は次のようになります。
%hash = (
bob => [(4.9)],
gita => [(3.9, 6.8)],
diu => [(3.0)],
);
[
と]
は配列への参照をマーク。
しかし、ハッシュの各キー、各キーの配列の各要素を順番に調べて並べ替える必要があるので、これは実際にはあなたの特定の問題を解決しません。ソートサブルーチンを作成することもできますが、sort
と言っても効率的ではないと言えるからです。
多分配列の配列が必要です。これにより、2つの値を持つgita
の問題を取り除くことができますが、並べ替えが簡単になります。このような構造を想像:今すぐ
my @array = (
[bob => 4.9],
[gita => 3.9],
[gita => 6.8],
[diu => 3.0],
);
、我々は$array[$x]->[1]
の値に応じ@array
に並べ替えを行うことができます!配列@array
の各要素に対して必要なのは、$ a - > [1]と$ b - > [1]を比較することだけです。逆ソートを行うと、最大の要素は$array[0]
になります。名前は$array[0]->[0]
で、要素は$array->[0]->[1]
です。
#! /usr/bin/env perl
use strict;
use warnings;
use feature qw(say switch);
my @array = (
[bob => 4.9],
[gita => 3.9],
[gita => 6.8],
[diu => 3.0],
);
@array = reverse sort mysort @array;
say "$array[0]->[0] $array[0]->[1]";
sub mysort {
$a->[1] <=> $b->[1];
}
、出力は次のとおりです。
gita 6.8.
あなたはPerldoc's perllolへリンクしているに気づきますか?以前はPerlの参考文献を使ったことがない人なら、読んでみることをお勧めします。
あなたは、少なくともあなたの質問にポーズをとるようなふりをするべきです。これは、キーに関連する複数の値が存在する '%ハッシュ 'ではありません。 –
@SinanÜnür私はSonamにあまりにも難しくありません。彼らはそれが実際にハッシュではないことを理解するのに十分よく知っているかもしれません。 –