-5

像这样

oldArray = [[a, b, c, d],[e, f, g, h]]

我需要一行代码,它将返回一个新数组,例如 oldArray 的每个元素中的元素 2

newArray = coolLine(oldArray, 2)

newArray -> [c, g]
4

3 回答 3

3

这会执行第 2 个元素:

oldArray.map { |a| a[2] }
于 2013-07-16T23:46:30.173 回答
0

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

oldArray = [[a, b, c, d],[e, f, g, h]]
newArray = coolLine(oldArray, 2)
newArray -> [c, g]

您想要的东西可以通过多种方式实现。最常见的是mapand 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

所以,创建你的“coolLine”看起来很简单。

但是,根据其他情况,拉链可能会变得更好。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] 技巧,您可以轻松编写自己的“更干净的 zip”,例如https://stackoverflow.com/a/1601250/717732

于 2013-07-17T07:37:33.243 回答
0

闻起来有点像作业,但您正在寻找map功能。

http://www.ruby-doc.org/core-2.0/Array.html

玩得开心!

于 2013-07-16T23:48:37.350 回答