我正在尝试弄清楚如何将键和值对从一个过滤器中过滤到另一个过滤器中。
例如,我想使用这个散列
x = { "one" => "one", "two" => "two", "three" => "three"}
y = x.some_function
y == { "one" => "one", "two" => "two"}
谢谢你的帮忙
EDIT:应该提到的是,在这个例子中,我希望它的行为像一个白名单过滤器。也就是说,我知道我想要什么,而不是我不想要什么。
发布于 2009-04-03 05:01:36
也许这就是你想要的。
wanted_keys = %w[one two]
x = { "one" => "one", "two" => "two", "three" => "three"}
x.select { |key,_| wanted_keys.include? key }
例如,Array和Hash中包含的可枚举的mixin提供了许多有用的方法,如select/reject/each/等。我建议您使用ri Enumerable查看它的文档。
发布于 2009-04-03 20:18:53
Rails的ActiveSupport库还为您提供了切片,除了处理键级别的散列之外:
y = x.slice("one", "two") # => { "one" => "one", "two" => "two" }
y = x.except("three") # => { "one" => "one", "two" => "two" }
x.slice!("one", "two") # x is now { "one" => "one", "two" => "two" }
这些都很不错,我一直都在用它们。
发布于 2009-04-02 22:29:39
您可以只使用内置的Hash函数reject。
x = { "one" => "one", "two" => "two", "three" => "three"}
y = x.reject {|key,value| key == "three" }
y == { "one" => "one", "two" => "two"}
你可以把任何你想要的逻辑放到reject中,如果代码块返回true,它将跳过新散列中的键和值。
https://stackoverflow.com/questions/711863
复制相似问题