我有一个如下所示的数组:
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]
如何将其转换为类似于此的哈希:
{1=>[6, 11], 2=>[7, 12], 3=>[8, 13], 4=>[9, 14], 5=>[10, 15]]
任何帮助将不胜感激!试图在Ruby中做到这一点。
答案 0 :(得分:7)
foo = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]
foo.transpose.map { |x, *y| [x, y] }.to_h
答案 1 :(得分:5)
这是映射事物的一种非常奇怪的方式,但是使用聪明的方法签名并不太难:
public CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view=LayoutInflater.from(parent.getContext()).inflate(R.layout.raw_view,parent,false);
return new CustomViewHolder(view) ;
}
然后你用splat调用它:
def pivot(keys, *values)
keys.each_with_index.map do |key, i|
[ key, values.map { |v| v[i] } ]
end.to_h
end
答案 2 :(得分:2)
我有点像zip
:
a = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]
a[0].zip(a[1].zip(a[2])).to_h
缺点是它有三个子阵列的硬连线。
这可以用splat推广,所以
a = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20]]
a[0].zip(a[1].zip(*a.drop(2))).to_h
产量
{1=>[6, 11, 16], 2=>[7, 12, 17], 3=>[8, 13, 18], 4=>[9, 14, 19], 5=>[10, 15, 20]}
无需任何额外的压缩级别。
答案 3 :(得分:1)
假设您的数组存储在变量名array
下,我会这样做:
hash = {}
array[0].each.with_index do |value, i|
hash[value] = [array[1][i], array[2][i]]
end
答案 4 :(得分:1)
pjs和ndn的答案的混合物:
arr.first.zip(arr[1..-1].transpose).to_h
在评论中也非常相似(由CarySwoveland发布):
arr.first.zip(arr.drop(1).transpose).to_h