只用一个键在哈希中查找键名?

San*_*ing 28 perl hash

如果我有哈希

my %h = (
    secret => 1;
);
Run Code Online (Sandbox Code Playgroud)

我知道这只是哈希中的一个键,但我不知道它叫什么.

然后我必须遍历该哈希

my $key;
foreach my $i (keys %h) {
    $key = $h{$i};
}
Run Code Online (Sandbox Code Playgroud)

或者有更好的方法来获取密钥的名称?

Mar*_*c B 40

一个列表的片段应该这样做

(keys %h)[0]
Run Code Online (Sandbox Code Playgroud)

keys 返回一个列表,所以只需提取该列表的第一个元素.

  • 使用此方法唯一需要注意的是"看起来像功能"问题.为了避免这种情况,您可能需要`((键%h)[0])`例如`perl -E'我的%h =(secret => 1); 说(键%h)[0];'`失败但是`perl -E'我的%h =(secret => 1); 说((键%h)[0]);'`有效.问题是perl看到`say`和`()`所以解析为`(比如说(键%h))[0]`.所以要小心. (7认同)
  • 没有返回数组或引用被解除引用.修复了术语并添加了相关文档的链接. (4认同)

Oes*_*sor 14

my ($key) = keys %h;
Run Code Online (Sandbox Code Playgroud)

当您在赋值运算符的两侧使用列表上下文时,键列表中的第一项将分配给$ key.


TLP*_*TLP 11

我不相信有必要使用这个keys功能.

my ($key) = %h;
Run Code Online (Sandbox Code Playgroud)

要么

my $key = (%h)[0];
Run Code Online (Sandbox Code Playgroud)

parens中的哈希将扩展为列表,然后我们可以简单地获取该列表的第一个元素,这是关键.


Col*_*ine 6

my @keys = keys %h;
my $key = $keys[0];
Run Code Online (Sandbox Code Playgroud)