Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用数组散列中的元素访问密钥_Arrays_Perl_Hash - Fatal编程技术网

Arrays 使用数组散列中的元素访问密钥

Arrays 使用数组散列中的元素访问密钥,arrays,perl,hash,Arrays,Perl,Hash,我有一个如下的数组散列: my @array1 = ("one", "two", "three", "four", "five"); my @array2 = ("banana", "pear", "apple"); my %hash = ( numbers => \@array1, fruit => \@array2 ); 我想使用数组的一个元素来访问密钥。例如,如果我有香蕉,我想打印水果 然而,当我打印$hash{banana}时,我会在打印中使用单位化值。如

我有一个如下的数组散列:

my @array1 = ("one", "two", "three", "four", "five");
my @array2 = ("banana", "pear", "apple");

my %hash = (
    numbers => \@array1,
    fruit => \@array2
);
我想使用数组的一个元素来访问密钥。例如,如果我有香蕉,我想打印水果


然而,当我打印$hash{banana}时,我会在打印中使用单位化值。如何正确访问此文件?

您可以创建两个不同的哈希:

my %hash1 = map { $_ => "numbers" } @array1;
my %hash2 = map { $_ => "fruit" } @array2;
并将它们连接起来:

my %hash = (%hash1, %hash2);

正如博罗丁在评论中已经提到的,没有直接的方法来实现这一点。但你可以用以下方法来做:

sub getKeyByValue {
    my ($hashref, $val) = @_; # get sub arguments
    for (keys %$hashref) {
        # find key by value and give back the key
        return $_ if grep $_ eq $val, @{$hashref->{$_}};
    }
    return undef; # value not found
}

my $key = getKeyByValue(\%hash, 'banana');
print $key;
产量:水果

只需将哈希引用和所需的值提供给子例程getKeyByValue,它就会返回相应的键。如果找不到该值,子例程将返回未定义的值undef。如果您的数据结构非常大,那么这种简单的搜索显然不是最有效的解决方案

注意:如果值banana在多个键下存储多次,那么该子例程当然只返回第一个随机匹配键。如果您对可能存储香蕉的所有键感兴趣,则必须修改子例程


有很多方法可以做到这一点,就像Perl中的大多数情况一样。例如,您可以反转散列并创建一个新的散列,请参见中的示例。

散列查找与数组查找一样,是单向的。给定一个键,您可以直接找到对应的值,但是使用一个值来查找键不起作用,您必须编写一个搜索。是否有任何方法可以翻转它,以便我可以为同一个值使用多个键?散列的值是独立的,但您可以将它们设置为相同的值。你可以用八个键构建一个散列,数组中的字符串可以是数字,也可以是水果作为值。好的,谢谢你的帮助。我看到的唯一问题是数组不是每次都相同,因此我无法将它们永久添加为键。然后,您需要在运行时在for循环中构建哈希,或者使用下面的答案中的映射。