散列只有一个键和一个值,每个键必须是唯一的。在你原来的问题,你有这个:
%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,它并不是真正的散列。 –