我想从这个数组中创建两个子数组:
a = [0, 1, 2, 3, 4, 5, 6]
此数组不会始终包含相同数量的元素,因为它取决于用户输入。
例如,在某些情况下它会是:
a = [0, 5]
或:
a = [5, 6, 4]
我想将数组分成两个子数组。第一个将包含1到4(含)的数字,第二个将包含0,5和6。
在第一个例子中,它将是:
a = [0, 1, 2, 3, 4, 5, 6]
sub_array1 = [1, 2, 3, 4]
sub_array2 = [0, 5, 6]
在第二个:
a = [0, 5]
sub_array1 = []
sub_array2 = [5]
第三部分:
a = [5, 6, 4]
sub_array1 = [4]
sub_array2 = [5, 6]
等等,具体取决于用户输入。
我该怎么做?
答案 0 :(得分:3)
首先想到的是Enumerable#partition。
sub_array1, sub_array2 = [0,1,2,3,4,5,6].partition {|x| (1..4).include? x }
=> [[1,2,3,4], [0,5,6]]
如果你有两个条件(我的意思是如果0,5,6是实际条件而不是排除的集合)我认为双重迭代不会受到伤害
a = [0,1,2,3,4,5,6]
sub_array1 = a.select { |x| (1..4).include? x }
sub_array2 = a.select { |x| [0,5,6].include? x }
答案 1 :(得分:1)
您可以尝试这样的事情:
[0,1,2,3,4,5,6].group_by{|x| [0,5,6].include? x}
结果将是哈希:
{true=>[0, 5, 6], false=>[1, 2, 3, 4]}
在第二种情况下:
[0,5].group_by{|x| [0,5,6].include? x}
结果将是:
{true=>[0, 5]}