【问题标题】:How to iterate through an array and pass each element onto a method?如何遍历数组并将每个元素传递给方法?
【发布时间】:2014-09-07 02:21:09
【问题描述】:

假设我有两个数组,里面有数字。我想遍历两个数组并将每个元素传递给一个接受 2 个参数的方法。

x = [2,3,9,1]
y = [1,9,2,1]

def add (x,y)
  x+y
end

我希望能够传递 x 和 y 中的每个元素。我想在 Ruby 中实现这个,但是 Python 或其他语言都可以。

【问题讨论】:

标签: python ruby arrays ruby-2.0


【解决方案1】:

在 Ruby 中,

x.zip(y){|x, y| ... add(x, y) ...}

会的。

【讨论】:

  • 压缩方式是什么?
  • #zip 方法采用两个数组并返回一个数组数组。更容易看到一个例子:[1,2].zip([3,4]) 导致[[1,3], [2,4]]
  • 另外,这段代码不会真正做任何事情。您需要使用诸如 each 或 map 之类的枚举器方法,具体取决于您要执行的操作。我也会在块中使用不同的变量。所以这将返回一个结果数组:x.zip(y).map {|i, j| add(i, j) }
  • @BrianUnderwood 你错了。这确实会遍历每对并计算总和。 OP 没有写出他们对总和所做的事情,所以我把它留下了点。至于变量,OP在add的定义中使用了xy,在block中使用并没有错。块变量仅限于块。它们不影响外部的xy
  • 啊,这两点都对。我在 irb 中运行了代码,但忽略了 put 并且没有看到任何结果。我的错!
【解决方案2】:

在python中:

for a, b in zip(x, y):
    add(a, b)

【讨论】:

    【解决方案3】:

    这也应该做的工作:

    # len(a) or len(b) can be used - As both are of same length
    
    for i in range(len(a)):
        add(a[i], b[i])
    

    【讨论】:

      【解决方案4】:
      >>> list(map(lambda x: add(x[0],x[1]), zip(x,y)))
      [3, 12, 11, 2]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-13
        • 2016-07-19
        • 1970-01-01
        • 1970-01-01
        • 2018-02-02
        • 1970-01-01
        • 2016-10-02
        • 1970-01-01
        相关资源
        最近更新 更多