如何找到以相同单词开头的密钥?

时间:2016-06-23 05:43:50

标签: ruby-on-rails ruby hash

我有以下哈希:

hash = {
  "Jason_1" => 2,
  "Jason_2" => 3,
  "Allison" => 1,
  "Jason_3" => 1,
  "Michelle" => 1
}

如何获取以" Jason"开头的密钥值?任何人都可以帮助我吗?

5 个答案:

答案 0 :(得分:2)

以下是单行:

# returns a hash with the elements
hash.select { |e| e.start_with? 'Jason' }

# if you want only keys
hash.select { |e| e.start_with? 'Jason' }.keys

# if you want only values
hash.select { |e| e.start_with? 'Jason' }.values

答案 1 :(得分:2)

另一种方式:

hash.map { |key, value| key =~ /\AJason/ && value }.compact

答案 2 :(得分:1)

regexp的另一种方式:

hash.select { |x| x =~ /^Jason/ }.values

答案 3 :(得分:1)

使用scan和find_all方法的另一种方法:

Hash[hash.find_all { |key, val| not key.scan(/^Jason/).empty? }]

如果您在rails中工作,这也应该可以正常工作:

hash.slice(*hash.keys.grep(/^Jason/))

答案 4 :(得分:1)

您可以通过有效的方式在一行中完成此任务:

 hash.select{|s,v| s =~ /^Jason_/}