在Ruby语言中,如何对数组进行排序以便使其内部元素(也是数组)按照长度大小排列,但不仅仅是按照长度升序或降序排序。
我想要将数组元素分布均匀,使得包含大量对象的项目与较小的数组相互交织。
例如,我有一个数组,其中每个元素都是一个包含
我想要将数组元素分布均匀,使得包含大量对象的项目与较小的数组相互交织。
例如,我有一个数组,其中每个元素都是一个包含
注释
中显示的对象数量的数组。为了清晰起见,我将它们分成了几个块,并计算出它们的总大小(见下面的动机说明)。[
# chunk 1, inner total length 5
[{...}], # 2
[{...}], # 1
[{...}], # 1
[{...}], # 1
# chunk 2, inner total length 11
[{...}], # 2
[{...}], # 2
[{...}], # 3
[{...}], # 4
# chunk 3, inner total length 9
[{...}], # 3
[{...}], # 3
[{...}], # 1
[{...}], # 2
# chunk 4, inner total length 15
[{...}], # 4
[{...}], # 3
[{...}], # 4
[{...}], # 4
]
我希望能够调整数组的排列方式,使其看起来更像下面这样。注意:此示例按大小顺序排列(1..4),但这并非必要。我只想将它们分成块,以便内部数组的累积长度是可比较的。
[
# chunk 1, inner total length 10
[{...}], # 1
[{...}], # 2
[{...}], # 3
[{...}], # 4
# chunk 2, inner total length 10
[{...}], # 1
[{...}], # 2
[{...}], # 3
[{...}], # 4
# chunk 3, inner total length 10
[{...}], # 1
[{...}], # 2
[{...}], # 3
[{...}], # 4
# chunk 4, inner total length 10
[{...}], # 1
[{...}], # 2
[{...}], # 3
[{...}], # 4
]
我的动机是为了将外部数组切片,以便我可以并行处理内部数组。我不希望其中一个并行进程获取一些小块的切片,而另一个进程获取一些非常大的块的切片。
注意:我知道我有4个并行进程,这可能有助于如何安排数组中的块。谢谢!
index % 4 == 0
的项分配给第一个进程,将index % 4 == 1
的项分配给第二个进程,将index % 4 == 2
的项分配给第三个进程,将index % 4 == 3
的项分配给第四个进程。这不会提供完美的解决方案,但大致上是正确的。它的好处是更简单,初始排序速度更快。 - Glyokoparallel
gem 可以自动为您完成此操作。 - Amadan