首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby散列,group_by值

Ruby散列,group_by值
EN

Stack Overflow用户
提问于 2014-01-16 13:38:31
回答 3查看 461关注 0票数 0

我想按值对散列进行分组。

示例:

代码语言:javascript
复制
start_with_hash = { "10:00" => "2014-10-10", "11:00" => "2014-10-10", "11:30" => "2014-10-10, 2014-10-11", "12:00" => "2014-10-11"}


end_with_hash = {"10:00, 11:00" => "2014-10-10", "11:30" => "2014-10-10, 2014-10-11", "12:00" => "2014-10-11" }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-16 13:42:51

以下是我要做的:

代码语言:javascript
复制
start_with_hash = { "10:00" => "2014-10-10", "11:00" => "2014-10-10", "11:30" => "2014-10-10, 2014-10-11", "12:00" => "2014-10-11"}
Hash[start_with_hash.group_by(&:last).map{|k,v| [v.map(&:first).join(","),k] }]
票数 3
EN

Stack Overflow用户

发布于 2014-01-16 13:43:59

代码语言:javascript
复制
merged_hash = start_with_hash.merge(end_with_hash){|key, oldval, newval| oldval }

更多信息,在这里http://ruby-doc.org/core-2.1.0/Hash.html#method-i-merge

代码语言:javascript
复制
=> {
         "10:00" => "2014-10-10",
         "11:00" => "2014-10-10",
         "11:30" => "2014-10-10, 2014-10-11",
         "12:00" => "2014-10-11",
  "10:00, 11:00" => "2014-10-10"
}
票数 0
EN

Stack Overflow用户

发布于 2014-01-16 14:02:01

不完全是你要求的:

代码语言:javascript
复制
class Hash
  # make a new hash with the existing values as the new keys
  # - like #rassoc for each existing key
  # - like invert but with *all* keys as array
  #
  #   {1=>2, 3=>4, 5=>6, 6=>2, 7=>4}.flip #=> {2=>[1, 6], 4=>[3, 7], 6=>[5]}
  #
  def flip
    inject({}) { |h, (k,v)| h[v] ||= []; h[v] << k; h }
  end
end

start_with_hash.flip 
#=> {"2014-10-10"=>["10:00", "11:00"], 
     "2014-10-10, 2014-10-11"=>["11:30"], 
     "2014-10-11"=>["12:00"]}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21163361

复制
相关文章

相似问题

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