Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.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
Ruby on rails 使用Ruby查找哈希表中包含某些字符的键_Ruby On Rails_Ruby_Hashtable - Fatal编程技术网

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