Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 我需要澄清一下如何在Ruby中创建这个2D数组?_Arrays_Ruby - Fatal编程技术网

Arrays 我需要澄清一下如何在Ruby中创建这个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

我目前正在通过AppAcademy Open学习Ruby,遇到了一个问题,我解决的问题与课程解决方案不同。我可以澄清一下课程解决方案是如何工作的

我们必须定义一个函数“zip”,它接受任意数量的数组作为参数(但所有数组的长度都相同)。函数应该返回一个2D数组,其中每个子数组包含来自每个参数的相同索引的元素

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]]