【问题标题】:perl grep matching key from hash tableperl grep 匹配来自哈希表的键
【发布时间】:2019-04-18 02:07:49
【问题描述】:

我正在处理 Perl 中的哈希。

我使用以下语句来检查变量是否与哈希表中的键匹配。该语句已经评估为真。所以 grep 工作。但是我现在如何检索匹配的哈希键和值?

if ( grep {/.*$var1*/} keys %my_hash ) {
  #print the key and value that results from the grep?
}

【问题讨论】:

    标签: perl hash


    【解决方案1】:

    您可以在条件中提取所有匹配的键:

    if (my @matches = grep /.*$var1*/, keys %my_hash) {
        my @values = @my_hash{@matches};
    }
    

    另外,/.*$var1*/ 很奇怪。您想将最后的星号应用于变量中最后出现的任何内容吗?此外,如果没有 /g,则在开头使用 .* 不会有任何效果:/$var1*/ 会同样工作(而且可能更快)。

    【讨论】:

      【解决方案2】:
      if (@captarr= grep {/.*$var1*/} keys %my_hash ) {
      }
      

      @captarr = grep (/.*$var1*/, keys %my_hash) 是一个 2 参数函数;
      第一个是正则表达式,第二个是应用正则表达式的数组,
      返回匹配的数组,就像第二个参数一样。 array 是由数组组成的一个字符串,在全局中搜索,它会 如果没有匹配,则返回 nul。 它类似于 @captarr = $my_str ~= /.*$var1*/ 交换参数位置的 LHS ~= RHS

      【讨论】:

      • 我将把它细化为第一个参数是一个被评估的代码块,$_ 设置为列表中当前条目的值,即第二个参数。如果块评估为真值,则将$_ 的当前值添加到“匹配”项列表中;如果它是假的,我们继续第二个参数中的下一项。 map 类似,但它在块执行后返回$_每个值。
      猜你喜欢
      • 2018-04-02
      • 2011-07-08
      • 2011-05-29
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      • 2017-04-18
      • 2014-12-30
      • 2021-11-28
      相关资源
      最近更新 更多