让我们假设我有以下数组:
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
将起作用,但原始数组会保持相同,但它不会那样工作。
使用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分配给第二个子阵列。