我正在尝试通过一些匹配将数组转换为散列。在将数组转换为散列之前,我想像这样合并值
"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/