我有以下数组:
a=int(input('X= '))
b=int(input('Y= '))
c=int(input('C= '))
d=int(input('D= '))
e=int(input('E= '))
f=int(input('F= '))
j=a+b+c+d+e+f
numbers=[a,b,c,d,e,f]
for i in (numbers):
if i%2==1:
m=j-i
print(m-(m%10))
elif i%2==0:
m=j
print(m-(m%10))
我需要
x = [ { a: [1,2] }, { a: [3,4] }, { a: [5,6] } ]
我尝试使用(除其他选项之外){ a: [[1,2], [3,4], [5,6]] }
:
merge
但不幸的是,我在结果周围得到了一个额外的数组。
有什么建议吗?
感谢
答案 0 :(得分:4)
x.flat_map(&:to_a).group_by(&:first).map{ |k, v| [k, v.map(&:last)] }.to_h
#=> [{:a=>[[1, 2], [3, 4], [5, 6]]}]
答案 1 :(得分:1)
这可能不是获得预期结果的最有效方法,但你可以做到
h = Hash.new([])
x.each { |hash|
hash.each { |key, values|
h[key] = h[key] + [values]
}
}
这样,最后h
是{:a=>[[1, 2], [3, 4], [5, 6]]}
答案 2 :(得分:1)
key = x.first.first.first
#=> :a
{ key=>x.map { |h| h[key] } }
#=> {:a=>[[1, 2], [3, 4], [5, 6]]}
请注意
a = x.first
#=> {:a=>[1, 2]}
b = a.first
#=> [:a, [1, 2]]
b.first
#=> :a
另一种方式:
a = x.map { |h| h.merge(h) { |_,v,_| [v] } }
#=> [{:a=>[[1, 2]]}, {:a=>[[3, 4]]}, {:a=>[[5, 6]]}]
a.reduce { |t,h| t.merge(h) { |_,o,n| o+n } }
#=> {:a=>[[1, 2], [3, 4], [5, 6]]}
这两个步骤都使用Hash#merge的形式,它使用一个块来确定合并的两个哈希中存在的键的值。有关详细信息,请参阅文档。
这两个步骤可以合并为一个如下:
x.reduce { |t,h| t.merge(h.merge(h) { |_,v,_| [v] }) { |_,o,n| o+n } }
#=> {:a=>[1, 2, [3, 4], [5, 6]]}