将数组划分为子数组

时间:2015-10-10 15:22:39

标签: arrays ruby

我想从这个数组中创建两个子数组:

 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]

等等,具体取决于用户输入。

我该怎么做?

2 个答案:

答案 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]}
相关问题