如何拆分Ruby哈希数组

Sum*_*sih 0 ruby

我想拆分哈希数组.

.split 没有努力.

在此输入图像描述

我想将它一分为二,同时保持顺序,这样可能是 .partion,.select,group_by不会为我工作.

这件事

allay = [
  {name: "Iron Man", power: "Tech"},
  {name: "Spiderman", power: "Iron Man as Uncle"},
  {name: "Thor", power: "God"},
  {name: "Hawk Eye", power: "None"},
  {name: "Black Widow", power: "love her"}
]
Run Code Online (Sandbox Code Playgroud)

以此为输出

=> [
  [
    {name: "Iron Man", power: "Tech"},
    {name: "Spiderman", power: "Iron Man as an Uncle"},
    {name: "Thor", power: "God"}
  ],
  [
    {name: "Hawk Eye", power: "None"},
    {name: "Black Widow", power: "love her <3"}
  ]
]
Run Code Online (Sandbox Code Playgroud)

mwp*_*mwp 9

您可以Enumerable#each_slice用来获得您想要的行为:

left, right = allay
  .each_slice(allay.length.succ / 2)
  .to_a
Run Code Online (Sandbox Code Playgroud)

当然,还有其他方法可以做到这一点,但它们并不是那么好.这是另一个:

pivot = allay.length.succ / 2
left, right = allay
  .partition
  .with_index { |_, i| i < pivot }
Run Code Online (Sandbox Code Playgroud)

而另一个:

left, right = [], allay.dup
left << right.shift until left.length >= right.length
Run Code Online (Sandbox Code Playgroud)

基准!

      each_slice    785.207k (± 5.6%) i/s -      3.920M in   5.006885s
      with_index    694.555k (± 6.6%) i/s -      3.474M in   5.023968s
      push_shift      1.674M (± 6.2%) i/s -      8.343M in   5.004380s
       take_drop      3.468M (± 6.8%) i/s -     17.303M in   5.013369s
Run Code Online (Sandbox Code Playgroud)