Ruby 在一行中创建另一个数组子元素的数组

Ruby 在一行中创建另一个数组子元素的数组,ruby,arrays,Ruby,Arrays,像这样 oldArray = [[a, b, c, d],[e, f, g, h]] 我需要一行代码,在oldArray的每个元素中返回一个新的数组,比如元素2 newArray = coolLine(oldArray, 2) newArray -> [c, g] 这不包括第2个元素: oldArray.map { |a| a[2] } 闻起来有点像家庭作业,但您正在寻找map函数 玩得开心 oldArray每个元素中的第二个元素 newArray = coolLine(oldA

像这样

oldArray = [[a, b, c, d],[e, f, g, h]]
我需要一行代码,在oldArray的每个元素中返回一个新的数组,比如元素2

newArray = coolLine(oldArray, 2)

newArray -> [c, g]

这不包括第2个元素:

oldArray.map { |a| a[2] }

闻起来有点像家庭作业,但您正在寻找
map
函数

玩得开心

oldArray每个元素中的第二个元素

newArray = coolLine(oldArray, 2)

newArray -> [c, g]
你想要的东西可以通过多种方式实现。最常见的是
map
zip

map
功能允许您处理序列并将其任何项重新计算为新值:

arr = [ [ 1,2,3 ], %w{ a b c }, [ 10,20,30] ]

# proc will be called twice
# 'item' will first be [ 1,2,3 ] then %w{ a b c } and so on
result = arr.map{|item|
    item[1]
}
result -> 2, then 'b', then 20
因此,创建“冷却线”似乎非常简单

然而,取决于其他因素,结果可能会更好。Zip获取N个序列并按顺序枚举它们,一次从所有元素返回第N个元素。为什么,这几乎正是你想要的:

arr = [ [ 1,2,3 ], %w{ a b c }, [ 10,20,30] ]

zipped = arr[0].zip(*arr[1..-1)

zipped -> [ [1,'a',10], [2,'b',20], [3,'c',30] ]

或者,如果您不喜欢[0]/*[1..-1]技巧,您可以在这里轻松编写自己的“cleaner zip”

我忘了提到我不能破坏原始数组…@cdnbcguy这不会破坏原始数组。添加!如果你想在某一天摧毁它,就绘制地图;)-喜欢地图!哎哟好了,就这样,我要睡觉了。对不起大家。。。。