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