【问题标题】:Adding two arrays in Ruby when the array length will always be the same当数组长度始终相同时,在 Ruby 中添加两个数组
【发布时间】:2014-01-17 05:09:12
【问题描述】:

所以,我需要将两个数组加在一起来填充第三个。 EG

a = [1,2,3,4]
b = [3,4,5,6]

这样:

c = [4,6,8,10]

我阅读了这里给出的答案:https://stackoverflow.com/questions/12584585/adding-two-ruby-arrays

但我使用的是 codecademy labs ruby​​ 编辑器,但它在那里不起作用,而且我的数组的长度总是相等的。另外,我不知道方法“.with_index”是什么或做什么,我不明白为什么当值已经是整数时必须使用“.to_i”。

看来这应该很简单吧?

【问题讨论】:

    标签: ruby arrays


    【解决方案1】:
    a = [1,2,3,4]
    b = [3,4,5,6]
    a.zip(b).map { |i,j| i+j } # => [4, 6, 8, 10] 
    

    这里

    a.zip(b) # => [[1, 3], [2, 4], [3, 5], [4, 6]]
    

    map 将每个 2 元组转换为其元素的总和。

    【讨论】:

    • zip方法有什么作用?
    • Nathan_U,我预料到了你的问题 :-) 如果不清楚,请告诉我。
    • 有道理,谢谢!因此, zip 将两个值放在一起形成一个二维数组,然后 map 将值更改为 { |i,j| 的总和我+j}。我正在尝试做的是在学习 ruby​​ 时创建一个一次性垫程序。所以我的问题是让我能够通过密钥对消息进行异或。我现在需要做的就是学习如何将字符转换为二进制然后再返回,我将达到 70%!
    • Nathan_U,看看Fixnum#to_s(base)String#to_i(base)
    【解决方案2】:

    选项 1

    对于纯 Ruby 解决方案,请尝试 transpose 方法:

    a = [1,2,3,4]
    b = [3,4,5,6]
    c = [a, b].transpose.map{|x, y| x + y} 
    #=> [4,6,8,10]
    

    选项 2

    如果你在 Rails 环境中,你可以使用 Rails 的sum 方法:

    [a, b].transpose.map{|x| x.sum} 
    #=> [4,6,8,10]
    

    解释

    transpose 非常适合您的场景,因为如果子数组的长度不同,它会引发 IndexError。来自the docs

    假设 self 是一个数组数组并转置行和列。 如果子数组的长度不匹配,则会引发 IndexError。

    【讨论】:

    • 转置方法到底是做什么的?
    • 我更新了答案,解释了 Ruby transpose 方法和 Rails sum 方法。
    猜你喜欢
    • 2014-01-07
    • 1970-01-01
    • 2021-11-27
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多