Ruby on rails 使用Ruby查找哈希表中包含某些字符的键
我有一个类似这样的杂烩:Ruby on rails 使用Ruby查找哈希表中包含某些字符的键,ruby-on-rails,ruby,hashtable,Ruby On Rails,Ruby,Hashtable,我有一个类似这样的杂烩: hash = { "key1-one" => 3, "key1-two" => 6, "key2-one" => 5, "key2-two" => 9 } hash = { "key1-one"=>3, :"key1-two"=>6, "key2-one"=>5, "key2-two"=> 9 } 现在,我想查找以key1开头的键的值,而不管下面是什么。我试过有钥匙吗?但似乎不起作用。我知道我可以使用regex,但是R
hash = { "key1-one" => 3, "key1-two" => 6, "key2-one" => 5, "key2-two" => 9 }
hash = { "key1-one"=>3, :"key1-two"=>6, "key2-one"=>5, "key2-two"=> 9 }
现在,我想查找以
key1
开头的键的值,而不管下面是什么。我试过有钥匙吗?
但似乎不起作用。我知道我可以使用regex,但是Ruby已经有内置的方法了吗?我相信你的散列将是这样的:
hash = { "key1-one" => 3, "key1-two" => 6, "key2-one" => 5, "key2-two" => 9 }
hash.select{ |key, _| key.start_with?("key1") }.values
hash = { "key1-one"=>3, :"key1-two"=>6, "key2-one"=>5, "key2-two"=> 9 }
试试这个:
hash.select { |k, _v| k.to_s.include? "key1" }.values
无需创建新的哈希来提取所需的值:
hash.values_at *hash.keys.select { |k| k.start_with? 'key1' }
#=> [3, 6]
用户当然可以在块中使用正则表达式:
{ |k| k =~ /^key1/ }
这些键是字符串还是符号?嘿,马克西姆,它们是字符串你可以这样做hash.map{k,v | v如果k.start_with?(“key1”)}
hey@nmeylan,很有魅力。谢谢你。我忽略了start_with?
nmeylan解决方案很好,只需在hash.map的末尾添加compact{k,v | v如果k.start_with?(“key1”)}.compact