首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby Hash白名单过滤器

Ruby Hash白名单过滤器
EN

Stack Overflow用户
提问于 2009-04-02 22:23:58
回答 7查看 45.8K关注 0票数 64

我正在尝试弄清楚如何将键和值对从一个过滤器中过滤到另一个过滤器中。

例如,我想使用这个散列

代码语言:javascript
复制
x = { "one" => "one", "two" => "two", "three" => "three"}

y = x.some_function

y == { "one" => "one", "two" => "two"}

谢谢你的帮忙

EDIT:应该提到的是,在这个例子中,我希望它的行为像一个白名单过滤器。也就是说,我知道我想要什么,而不是我不想要什么。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-04-03 05:01:36

也许这就是你想要的。

代码语言:javascript
复制
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查看它的文档。

票数 56
EN

Stack Overflow用户

发布于 2009-04-03 20:18:53

Rails的ActiveSupport库还为您提供了切片,除了处理键级别的散列之外:

代码语言:javascript
复制
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" }

这些都很不错,我一直都在用它们。

票数 105
EN

Stack Overflow用户

发布于 2009-04-02 22:29:39

您可以只使用内置的Hash函数reject。

代码语言:javascript
复制
x = { "one" => "one", "two" => "two", "three" => "three"}
y = x.reject {|key,value| key == "three" }
y == { "one" => "one", "two" => "two"}

你可以把任何你想要的逻辑放到reject中,如果代码块返回true,它将跳过新散列中的键和值。

票数 49
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/711863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档