Arrays 我需要澄清一下如何在Ruby中创建这个2D数组?
我目前正在通过AppAcademy Open学习Ruby,遇到了一个问题,我解决的问题与课程解决方案不同。我可以澄清一下课程解决方案是如何工作的 我们必须定义一个函数“zip”,它接受任意数量的数组作为参数(但所有数组的长度都相同)。函数应该返回一个2D数组,其中每个子数组包含来自每个参数的相同索引的元素Arrays 我需要澄清一下如何在Ruby中创建这个2D数组?,arrays,ruby,Arrays,Ruby,我目前正在通过AppAcademy Open学习Ruby,遇到了一个问题,我解决的问题与课程解决方案不同。我可以澄清一下课程解决方案是如何工作的 我们必须定义一个函数“zip”,它接受任意数量的数组作为参数(但所有数组的长度都相同)。函数应该返回一个2D数组,其中每个子数组包含来自每个参数的相同索引的元素 zip(['a','b','c'],[1,2,3]) 应返回: [['a',1],['b',2],['c',3]] 以下是我的解决方案: def zip(*arrs) main_a
zip(['a','b','c'],[1,2,3])
应返回:
[['a',1],['b',2],['c',3]]
以下是我的解决方案:
def zip(*arrs)
main_arr = Array.new(arrs[0].length) {Array.new}
arrs.each do |array|
array.each_with_index do |ele, ele_idx|
main_arr[ele_idx] << ele
end
end
main_arr
end
def zip(*arrays)
length = arrays.first.length
(0...length).map do |i|
arrays.map { |array| array[i] }
end
end
有人能解释一下2D阵列是如何在上面的映射范围内构建的吗?作为初学者,我有点困惑,需要一些澄清
编辑:
非常感谢你,伊吉安。解释真的很有帮助。运行下面的代码应该是不言自明的,请参阅注释:
def zip_steps(*arrays)
# get the size of the array
length = arrays.first.length
# mapping the range up to use as indexing
p (0...length).map { |i| i } #=> [0, 1, 2]
# map the arrays
p arrays.map { |array| array } #=> [["a", "b", "c"], [1, 2, 3]]
# map the arrays returning a specific element at index 1, for example
p arrays.map { |array| array[1] } #=> ["b", 2]
# put arrays mapping inside the range mapping
# where instead of returning the element 1
# it returns the element i
(0...length).map do |i|
arrays.map { |array| array[i] }
end
end
ary1 = ['a','b','c']
ary2 = [1,2,3]
p zip_steps(ary1, ary2) #=> [["a", 1], ["b", 2], ["c", 3]]