根据满足条件和差异的内容创建两个数组

时间:2016-11-26 03:59:09

标签: arrays ruby

假设我有以下数组:

a = [1,2,3]

我想把它分成两个数组,一个是条件为真的项目,另一个条件是假的:

b, c = a.split_in_two_arrays_or_something_like_that {|x| x == 3}
#=> b = [3]
#=> c = [1,2]

我怎样才能在红宝石中做到这一点?我不想用以下内容重复代码:

b = a.reject {|x| x == 3}
c = a.reject {|x| x != 3}

两次迭代数组。

是否有某些方法可以返回与修改后的数组不同的方法?例如,如果delete_if将返回已删除的元素,lebedev@MacBook-Pro-2.local.4354将起作用,但原始数组将保持相同,但它不会那样工作。

1 个答案:

答案 0 :(得分:4)

使用Enumerable#partition根据条件分离数组中的元素。我们在partition块中定义条件:

a = [1,2,3]

b, c = a.partition { |x| x == 3 } #=> [[3], [1, 2]]

b #=> [3]
c #=> [1, 2]

此方法创建一个包含两个子数组的数组。

  • 第一个子数组包含partition块返回 true 的值。
  • 第二个子数组包含partition块返回 false 的值。

最后,我们应用并行分配将变量 b 分配给第一个子阵列,将 c 分配给第二个子阵列。