gpt4 book ai didi

ruby - 检查数组中两个不同数字的总和是否等于可变数字?

转载 作者:数据小太阳 更新时间:2023-10-29 06:46:22 25 4
gpt4 key购买 nike

在 Ruby 中,我想获取一个数字数组,选择 2 个不同的数字,将这 2 个数字加在一起,然后查看那里的天气等于变量 x.y'd a variable x。这是我使用的代码

def arrayIsEqual? (numArray, x)
return true if numArray.sample + numArray.sample == x
return false if numArray.empty? || numArray.count == 1
end

例如

numArray = [4,2,7,5]
x = 11

arrayIsEqual (numArray, n) 应该返回 true,因为 4 + 7 = n(11)

我如何让它工作?

我不希望它是 2 个随机数,只是加起来为 n 的任意 2 个不同的数字

最佳答案

看起来您正在尝试查看数组中是否有 任何 两个数字加起来等于指定值 x .但是,您的代码只是随机选择两个数字并检查这些数字是否相加。

Ruby 有 Array#combination 方法,生成给定长度的所有组合:

def contains_pair_for_sum?(arr, n)
!!arr.uniq.combination(2).detect { |a, b| a + b == n }
end

一些注意事项:

  • 首先,我们按照Ruby 的约定命名它:每个单词都是separated_by_underscores。 . ?在最后意味着该方法是一个谓词方法并返回一个真值或假值。

  • 在方法内部,发生了一些事情。让我们逐条查看该行。

    • arr : 我们采用传入的数组。

    • <...>.uniq :我们只看独特的元素(因为 OP 想要选择两个不同的数字)。

    • <...>.combination(2) :我们要求长度为 2 的数组中的所有组合。如果数组是 [4, 5, 6] ,我们会得到 [[4, 5], [4, 6], [5, 6]] .

    • <...>.detect { |a, b| a + b == n } :我们寻找第一个加起来等于n的组合.如果我们找到了一个,那就是那个方法的结果。否则,我们得到 nil .

    • !!<...> : 最后,我们采用从 detect 得到的结果并否定它两次​​。第一个否定产生一个 boolean 值( true 如果我们得到的值是 nil ,或者 false 如果是其他值);第二个否定产生一个与第一个否定的真值相同的 boolean 值。这是一个 Ruby 习惯用法,用于将结果强制为 true。或 false .

让我们看看它的实际效果:

array = [4, 5, 9, 7, 8]

contains_pair_for_sum?(array, 11)
# => true (because [4, 7] sums to 11)

contains_pair_for_sum?(array, 17)
# => true (because [9, 8] sums to 17)

contains_pair_for_sum?(array, 100)
# => false (no pair matched)

关于ruby - 检查数组中两个不同数字的总和是否等于可变数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23572515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com