Ruby 修改hash值if value数组
Ruby modify hash value if value array
我有一个像这样的 ruby 哈希:
hash = {properties: [13], attributes: [11, 15, 15], places: [66]}
我想将我的散列转换为:
hash = {properties: 13, attributes: [11, 15], places: 66}
数组长度大于 1 的所有值,保持原样(数组),所有其他值都是第一个元素。尝试了几个 ifs,结果不是我想要的那样
hash.map{ |k,v| { k => v.uniq } }.reduce(&:merge)
这是我的做法:
Hash[hash.map { |k ,v| [k, v.size > 1 ? v.uniq : v.first] }]
# => {:properties=>13, :attributes=>[11, 15], :places=>66}
# or
hash.map { |k ,v| [k, v.size > 1 ? v.uniq : v.first] }.to_h
# => {:properties=>13, :attributes=>[11, 15], :places=>66}
def convert(h)
Hash[h.map {|k,v| [k, v.size == 1 ? v.first : v.uniq]}]
end
convert(hash)
# => {:properties=>13, :attributes=>[11, 15], :places=>66}
这是另一种方式:
hash.merge(hash) { |*_, v| (v.size==1) ? v.first : v.uniq }
=> {:properties=>13, :attributes=>[11, 15], :places=>66}
我有一个像这样的 ruby 哈希:
hash = {properties: [13], attributes: [11, 15, 15], places: [66]}
我想将我的散列转换为:
hash = {properties: 13, attributes: [11, 15], places: 66}
数组长度大于 1 的所有值,保持原样(数组),所有其他值都是第一个元素。尝试了几个 ifs,结果不是我想要的那样
hash.map{ |k,v| { k => v.uniq } }.reduce(&:merge)
这是我的做法:
Hash[hash.map { |k ,v| [k, v.size > 1 ? v.uniq : v.first] }]
# => {:properties=>13, :attributes=>[11, 15], :places=>66}
# or
hash.map { |k ,v| [k, v.size > 1 ? v.uniq : v.first] }.to_h
# => {:properties=>13, :attributes=>[11, 15], :places=>66}
def convert(h)
Hash[h.map {|k,v| [k, v.size == 1 ? v.first : v.uniq]}]
end
convert(hash)
# => {:properties=>13, :attributes=>[11, 15], :places=>66}
这是另一种方式:
hash.merge(hash) { |*_, v| (v.size==1) ? v.first : v.uniq }
=> {:properties=>13, :attributes=>[11, 15], :places=>66}