最大計算値に関連付けられたキーを見つけるにはどうすればよいですか?

私はその最大値にハッシュと対応するキーで最大値を見つけることを試みています。私のハッシュのように見える

%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の参考文献を使ったことがない人なら、読んでみることをお勧めします。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です