我有一个哈希数组:
[
{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}
]
答案 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
那里得到了想法。
答案 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。