根据使用 ruby 的组合,将数组值与另一个数组和 return 值进行比较

Compare array values with another array and return value depending on combinations using ruby

我有以下数组

prime_arr = [2,3,5,7,11,13]

我需要检查数组是否有 3、5、7 和 return 值因存在而异

如果它有3个单独return "Yes"和5个单独return "it is "和7个单独return "done"和

如果有[3,5] return "Yes it is "

如果它有 [3,5,7] return "Yes it is done"

return 值应因组合而异

提前致谢。

words = ['Yes', 'it is', 'done']
prime_arr = [2, 3, 5, 7, 11, 13]
target = [3, 5, 7]

words.take((prime_arr & target).size).join(" ")

已编辑:

prime_arr = [2, 3, 5, 7, 11, 13]
mapping = {
  [3] => 'Yes',
  [3, 5] => 'Yes it is',
  [3, 5, 7] => 'Yes it is done'
}

mapping[prime_arr & [3, 5, 7]] # => 'Yes it is done'
mapping[prime_arr & [3, 5]] # => 'Yes it is'
mapping[prime_arr & [3]] # => 'Yes'

mapping 中的 none 个键匹配时,你得到一个 nil。

因为这看起来很像家庭作业(而且因为这里没有人为您编写代码而得到报酬),所以我不会给您实际的答案。然而,我会给你一些关于拼图碎片的指示 - 希望你能够将它们拼凑起来。

您可以使用#& 方法找到两个数组之间的交集。所以:

prime_arr = [2,3,5,7,11,13]
# => [2, 3, 5, 7, 11, 13]
prime_arr & [3]
# => [3]
prime_arr & [3,5]
# => [3, 5]
prime_arr & [3,5,7]
# => [3, 5, 7]
prime_arr & [4]
# => []

case 语句可以切换数组值,如下所示:

a = [1,2]
case a
  when [1]; "just one"
  when [1,2]; "both"
end
# => "both"

祝你好运!

其他三种情况你没说清楚,我猜的。

[[3, 5, 7], ["Yes ", "it is ", "done"]]
.transpose.each.with_object(""){|(i, w), s| s << w if prime_arr.include?(i)}