以交替模式订购阵列

时间:2019-04-20 10:10:05

标签: ruby-on-rails arrays ruby sorting

我有一个哈希数组:

[ 
  {item0: 1.0, item1: 0.0},
  {item0: 0.0, item1: 1.0},
  {item0: 0.0, item1: 1.0},
  {item0: 0.0, item1: 0.0}
]

我希望能够对数组进行排序,以使item1在1.0和0.0之间交替。将会有相同数量的1和0。

那怎么办?

array.sort_by{|x| x[item1]}无法获得所需的输出。

所需的输出是:

[ 
  {item0: 1.0, item1: 0.0},
  {item0: 0.0, item1: 1.0},
  {item0: 0.0, item1: 0.0},
  {item0: 0.0, item1: 1.0}
]

2 个答案:

答案 0 :(得分:1)

我相信这会给您您想要的。

data = [{item0: 1.0, item1: 0.0},
        {item0: 0.0, item1: 1.0},
        {item0: 0.0, item1: 1.0},
        {item0: 0.0, item1: 0.0}]

zeros, ones = data.partition{ |i| i[:item1] == 0 }

# This does the same
# ones   = data.select { |x| x[:item1] == 1 }
# zeros = data.select { |x| x[:item1] == 0 }

ones.zip(zeros).flatten.compact

great answer

那里得到了想法。

答案 1 :(得分:0)

 evens, odds = my_array.partition{|i| i[:item1] == 0 }
 alternating = []
 max = [evens.size, odds.size].max
 t = 0
 while t < max + 1
    alternating << evens[t] unless evens[t].nil?
    alternating << odds[t] unless odds[t].nil?
    t += 1
 end

alternating

如果大小差异较大,则应在最后将所有剩余值分组。如果那不是您想要的,则将max更改为min。