Ruby:对象数组的组数组

时间:2015-07-16 12:45:33

标签: arrays ruby group-by

我想按对象属性对一组对象数组进行分组。

所以,如果我们有

array =[[object1, object2], [object3], [object4, object5, object6]]

此对象有一个属性说" source"。现在假设每个对象具有以下源值:

object1> source=source1
object2> source=source2
object3> source=source2
object4> source=source1
object5> source=source1
object6> source=source3

我想对里面的数组进行分组" array"按来源属性。

所以我想:

source1 => [object1, object2], [object4, object5, object6]
source2 => [object1, object2] 
source3 => [object4, object5, object6]

对于source2,我不关心1号数组,所以我不想添加[object3]

任何帮助?

1 个答案:

答案 0 :(得分:2)

在您编辑之后变得明显的关键是,您已经对对象进行了分组,并且您希望根据每个分组中的对象将您的组分组到可能的多个存储桶中,因此这不是一个纯filename = 'file' for line in lines: file = open(filename + line[21:22] + '.txt', 'a') file.write(line) 算法。这是一个可能的解决方案:

首先,创建一个哈希来保存您的组。这会将空数组设置为默认值:

group_by

然后sources = Hash.new {|h,k| h[k] = Array.new } 您不关心的人(请参阅Enumerable#reject)。

reject

最后,遍历这些组,收集他们的array.reject{|group| group.size == 1} 并将该组添加到哈希中的相应源。完整的例子:

source