私はその最大値にハッシュと対応するキーで最大値を見つけることを試みています。私のハッシュのように見える
%hash = (
bob => "4.9",
gita => "3.9 , 6.8",
diu => "3.0",
);
今、私はそれが属するキーでそのハッシュの最大値を探したいと思います。
必要な出力は
gita 6.8
私は%hash
で値を昇順にソートしようとしています。このような最大値を得るには
sub hashValueAscendingNum {
$hash{$a} cmp $hash{$b};
}
foreach my $highest (sort hashValueAscendingNum(keys(%hash))) {
print "t $hash{$highestMagnitude} tt $highest n";
}
私は、ハッシュのすべての値がチェックされ、最大値を持つものがそのキーと共に返されるようにしたい。
どうやってやるの?
ハッシュには単一のキーと単一の値しかなく、各キーは一意でなければなりません。元の問題では、次のようになります。
%hash = (
bob => "4.9",
gita =>"3.9 , 6,8",
diu => "3.0",
);
まあ、 gita
は2つの値を持つことはできません。また、 gita
に等しい2つのキーをハッシュに持たせることはできません。したがって、単純なハッシュを使用して値を格納することはできません。
しかし、これを回避するには、参照を使用する方法があります。たとえば、ハッシュの各要素に配列への参照を含めることができます。したがって、データ構造は次のようになります。
%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],
);
Now, we can do a sort on @array
depending upon the
value of $array[$x]->[1]
! All we need is for each
element of the array @array
is to compare $a->[1]
with $b->[1]. Then, if we do a reverse sort on it, the biggest
element will be $array[0]
. The name is
$array[0]->[0]
and the element is
$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の参考文献を使ったことがない人なら、読んでみることをお勧めします。