ruby - 如何合并数组索引值并创建哈希

标签 ruby

我正在尝试通过一些匹配将数组转换为散列。在将数组转换为散列之前,我想像这样合并值

 "Desc,X1XXSC,C,CCCC4524,xxxs,xswd"

并从中创建一个散列。规则是,数组的第一个值是哈希中的键,数组中有重复的键,对于这些键,我需要合并值并将其放在一个键下。 “Desc:”是键。我的程序看起来像这样。

 p 'test sample application'
 str = "Desc:X1:C:CCCC:Desc:XXSC:xxxs:xswd:C:4524"
 arr = Array.new
 arr = str.split(":")
 p arr
 test_hash = Hash[*arr]
 p test_hash

我找不到解决问题的方法。如果有人能指导我,将不胜感激。

最佳答案

Facets 的功能方法:

require 'facets'
str.split(":").each_slice(2).map_by { |k, v| [k, v] }.mash { |k, vs| [k, vs.join] }
#=> {"Desc"=>"X1XXSC", "C"=>"CCCC4524", "xxxs"=>"xswd"}

并不是说没有 Facets 就做不到,而是因为核心中缺少一些基本的抽象,所以它会更长:

Hash[str.split(":").each_slice(2).group_by(&:first).map { |k, gs| [k, gs.map(&:last).join] }]
#=> {"Desc"=>"X1XXSC", "C"=>"CCCC4524", "xxxs"=>"xswd"}

关于ruby - 如何合并数组索引值并创建哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17317974/

相关文章:

html - 使用 Nokogiri 迭代样式属性

mysql - 如何在 Ruby on Rails 4 中创建比其父级具有更多属性的继承模型?

ruby-on-rails - ActiveRecord 和 ActiveRecord::Relation 对象之间的区别

ruby - 在 Ruby 中打开默认浏览器

ruby - RVM PATH 未正确设置

ruby-on-rails - 在 Ruby 中递增枚举?

ruby-on-rails - 使用 Carrierwave 显示不带扩展名的文件名

mysql - Rails - mysql2安装错误

在 Heroku 上安装 Ruby 应用程序 : rake aborted. KeyError: key not found

ruby - Ruby 的 OptionParser 是如何工作的?