请你帮忙。我有3组值的input_array。
我需要的团体命令是:
1st group: Pou
2nd group: Apl
3rd group: Gab这个顺序已经在input_array中完成了,但是我想对每个组进行排序。
到目前为止,我的脚本产生了下表的中央列(当前输出)中给出的输出。
input_arr = ["Pou-12","Pou-7","Pou-4","Pou-8","Pou-9","Pou-11","Pou-10","Pou-3","Pou-2","Pou-1","Pou-6","Pou-5","Apl","Gab-3","Gab-5","Gab-4","Gab-1","Gab-2"]
b=input_arr.sort_by do |s|
if s =~ /^\d+$/
[2, $&.to_i]
else
[1, s]
end
end
puts b下面也显示了所需的排序输出数组。
input array | current output | desired output array Pou-12 | Apl | Pou-1
Pou-7 | Gab-1 | Pou-2
Pou-4 | Gab-2 | Pou-3
Pou-8 | Gab-3 | Pou-4
Pou-9 | Gab-4 | Pou-5
Pou-11 | Gab-5 | Pou-6
Pou-10 | Pou-1 | Pou-7
Pou-3 | Pou-10 | Pou-8
Pou-2 | Pou-11 | Pou-9
Pou-1 | Pou-12 | Pou-10
Pou-6 | Pou-2 | Pou-11
Pou-5 | Pou-3 | Pou-12
Apl | Pou-4 | Apl
Gab-3 | Pou-5 | Gab-1
Gab-5 | Pou-6 | Gab-2
Gab-4 | Pou-7 | Gab-3
Gab-1 | Pou-8 | Gab-4
Gab-2 | Pou-9 | Gab-5更新
用数组代替哈希的解决方案。
a = ["Pou-7","Pou-4","Gab-4","Pou-8","Pou-9","Pou-11","Pou-10","Pou-3","Pou-2","Pou-1","Pou-6","Pou-5","Apl","Gab-3","Gab-5","Gab-1","Pou-12","Gab-2"]
order = [ "Pou", "Apl", "Gab" ]
a.map{ |s| head,tail = s.split("-"); [order.index(head), tail.to_i, s]}.sort.map(&:last)
=> ["Pou-1", "Pou-2", "Pou-3", "Pou-4", "Pou-5", "Pou-6", "Pou-7", "Pou-8", "Pou-9",
"Pou-10", "Pou-11", "Pou-12", "Apl", "Gab-1", "Gab-2", "Gab-3", "Gab-4", "Gab-5"]发布于 2017-07-20 07:03:40
你可以试试这个:
b = input_arr.group_by { |e| e.split("-")[0] }
b = b.flat_map { |k, v| v.sort_by!{ |vs| vs.split("-")[1].to_i }; v }https://stackoverflow.com/questions/45207235
复制相似问题