首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据键的值将散列数组拆分为两部分

根据键的值将散列数组拆分为两部分
EN

Stack Overflow用户
提问于 2014-02-05 17:10:43
回答 3查看 2.9K关注 0票数 2

如何根据ate键的值将这个哈希数组分割成两个?

代码语言:javascript
复制
array = [
  { name: "Gad", ate: true },
  { name: "Lad", ate: false },
  { name: "Bad", ate: true },
  { name: "Sad", ate: false }
]

示例输出

代码语言:javascript
复制
array_1 = [
  { name: "Gad", ate: true },
  { name: "Bad", ate: true }
]
array_2 = [
  { name: "Lad", ate: false },
  { name: "Sad", ate: false }
]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-05 17:12:12

使用Enumerable#partition方法:

代码语言:javascript
复制
array.partition { |x| x[:ate] }
# => [[{:name=>"Gad", :ate=>true}, {:name=>"Bad", :ate=>true}], 
#     [{:name=>"Lad", :ate=>false}, {:name=>"Sad", :ate=>false}]]

或者:

代码语言:javascript
复制
array_1, array_2 = array.partition { |x| x[:ate] }

array_1
# => [{:name=>"Gad", :ate=>true}, {:name=>"Bad", :ate=>true}]

array_2
# => [{:name=>"Lad", :ate=>false}, {:name=>"Sad", :ate=>false}]
票数 14
EN

Stack Overflow用户

发布于 2014-02-05 17:15:53

代码语言:javascript
复制
array_one, array_two = *array.group_by { |x| x[:ate] }.map(&:last)

=> array_one
=> # [{:name=>"Gad", :ate=>true}, {:name=>"Bad", :ate=>true}]
=> array_two
=> # [{:name=>"Lad", :ate=>false}, {:name=>"Sad", :ate=>false}]

thx @CarySwoveland

票数 2
EN

Stack Overflow用户

发布于 2014-02-05 18:25:29

我无法与partition竞争,但另一种方式是:

代码语言:javascript
复制
trues  = array.select { |h| h[:ate] }
falses = array - trues
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21583849

复制
相关文章

相似问题

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