散列只有一個鍵和一個值,每個鍵必須是唯一的。在你原來的問題,你有這個:
%hash = (
bob => "4.9",
gita =>"3.9 , 6,8",
diu => "3.0",
);
那麼,gita
不能有兩個值。也不能,你可以有兩個密鑰在你的散列等於gita
。因此,你不能使用簡單的哈希來存儲你的值。
雖然通過使用引用可以解決這個問題。例如,散列中的每個元素都可以包含一個reference to an array。因此,數據結構可以是這樣的:
%hash = (
bob => [(4.9)],
gita => [(3.9, 6.8)],
diu => [(3.0)],
);
[
的和]
馬克到數組的引用。
但是,這並不能真正解決您的特定問題,因爲您現在必須遍歷散列中的每個鍵,然後對數組中的每個鍵進行排序。你可以創建一個排序子程序,但僅僅因爲你可以說sort
不會使它有效。可能你需要的是一組數組。這將擺脫你有gita
有兩個值的問題,但使排序更容易一些。試想一下,這樣的結構:
my @array = (
[bob => 4.9],
[gita => 3.9],
[gita => 6.8],
[diu => 3.0],
);
現在,我們可以做@array
排序依據的$array[$x]->[1]
價值!我們所需要的是爲數組@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引用。
你至少應該假裝爲提出你的問題付出一些努力。這不是'%hash',其中有多個值與一個關鍵字相關聯。 –
@SinanÜnür我不會在Sonam太辛苦。他們可能不會很好地理解Perl,它並不是真正的散列。 –