【发布时间】:2017-01-23 06:12:08
【问题描述】:
我正在尝试对哈希数组@aoh 进行排序,目前我提取某些键的值并对这个列表进行排序。我从每个哈希中提取键 description 的值。
现在我希望能够识别数组中的哪个元素对应于哈希元素的给定值。
我想我需要使用哈希引用,但是怎么做呢?
我的代码示例如下
#!/usr/bin/perl
use warnings;
use strict;
my %h1 = ('description', 'great one');
my %h2 = ('description', 'fool');
my %h3 = ('description', 'easy');
my %h4 = ('description', 'intermediate');
my %h5 = ('description', 'hard');
my %h6 = ('description', 'beauty');
my %h7 = ('description', 'dark');
my %h8 = ('description', 'yellow');
my %h9 = ('description', 'red');
my @aoh = ( %h1, %h2, %h3, %h4, %h5, %h6, %h7, %h8, %h9 );
my @vals;
while ( my ($index, $value) = each @aoh ) {
if ( $aoh[$index] ne 'description' ) {
push @vals, $aoh[$index];
}
}
my @sorted = sort @vals;
printf "@sorted\n";
在一个结果中,我想像这样得到@sorted_aoh:
@sorted_aoh = (
'description'->'beauty',
'description'->'dark',
'description'->'easy',
'description'->'fool',
'description'->'great one',
'description'->'one',
'description'->'hard',
'description'->'intermediate',
'description'->'red',
);
【问题讨论】:
-
如果您需要“确定数组的哪个元素对应于哈希元素的给定值”,那么您不需要您询问的排序数组,而是像鲍罗丁的回答中的查找机制。另外,我建议阅读有关这些内容的一些文档。参考教程是perlreftut,对于复杂的数据结构,有说明书perldsc
-
@zdim,感谢您的提示)我会研究这些文档
-
以防万一……我认为您的“描述”实际上是不同的文本,并不总是同一个词。但是,如果你真的有一对散列,并且每个散列都有 same word 作为键,那么你应该改变设计(不需要两个数据结构,但使用数组或一个哈希)。此外,通过散列 values 对数组进行排序似乎很尴尬——你将如何查找它们?你将如何检索值
hard的元素?您必须进行迭代,否认散列的目的。也许你应该解释这一切的目的。 -
@zdim,在这种情况下表示的数据结构是真实数据的抽象和精简版本(如讨论所示 - 不幸的是,不是最成功的)。在实际任务中它更复杂,但(正如我所想)澄清问题 - 这些数据应该足够了。
-
好的,感谢您确认 :) 我仍然不确定按哈希值排序的数组的实用性,但这可能已经在抽象中丢失了——您知道您的真实数据和问题。