将Ruby数组转换为连续对数组

42

什么是将Ruby数组转换为其元素成对连续数组的最简单方法?

我的意思是:

x = [:a, :b, :c, :d]

期望的结果:

y #=> [[:a, :b], [:c, :d]]
2个回答

89

使用Enumerable#each_slice:

y = x.each_slice(2).to_a
#=> [[:a, :b], [:c, :d]]

[0, 1, 2, 3, 4, 5].each_slice(2).to_a
#=> [[0, 1], [2, 3], [4, 5]]

4
Hash[*[:a, :b, :c, :d]].to_a

聪明,但它不保留顺序。 - Josh Lee
它确实可以(至少在 Ruby 1.9.2dev 中)。 - Daniel O'Hara
3
如果存在重复的键,上述代码也会失败。Hash[*[:a,:b,:c,:d,:a,:e]] - Chubas
如果数组的长度不是2的倍数,则也会失败。Hash [* [1,2,3]] .to_a 失败,而 [1,2,3] .each_slice(2) .to_a 则不会。 - PL J

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接