2

我有一个有keys => meaning关系的哈希。此哈希的各种元素是:

"fish" => "aquatic animal"
"fiend" => "bad person"
"great" => "remarkable"

我需要创建一个函数 find ,这样当我使用这个函数时find("fi"),它应该返回 " fish" 和 " fiend" 以及定义。所以输出应该是:

"fish" => "aquatic animal"
"fiend" => "bad person"

我是正则表达式和 Ruby 的新手。

4

2 回答 2

5
  hash.select{ |k,v| k.start_with? pattern }
于 2012-07-23T21:29:07.213 回答
3

您可以将其作为单个表达式执行:

hash.select { |key, value| key.start_with? prefix }

或者,如果您使用的是 Ruby 1.8:

hash.reject { |key, value| not key.start_with? prefix }

例子:

{'foo' => 1, 'bar' => 2, 'baz' => 3}.select { |key, value| key.start_with? 'f' } # {'foo' => 1}
{'foo' => 1, 'bar' => 2, 'baz' => 3}.select { |key, value| key.start_with? 'b' } # {'bar' => 2, 'baz' => 3}

select只会保留与块中的条件不匹配的对。如果以(很明显)开头,str.start_with? prefix则返回 true 。strprefix

1.8 代码中有一点尴尬 - 我正在做reject,而不是select我需要从#start_with?. 原因是在 Ruby 1.8 中Hash#reject返回 a Hash,而Hash#select返回对数组。

于 2012-07-23T21:25:53.490 回答