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

问题描述 投票:1回答:1

让我们假设我有以下数组:

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将起作用,但原始数组会保持相同,但它不会那样工作。

arrays ruby
1个回答
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分配给第二个子阵列。

© www.soinside.com 2019 - 2024. All rights reserved.