【发布时间】:2017-12-25 07:50:28
【问题描述】:
请您帮忙。我有想要按 2 个条件排序的数组“值”。
第一个条件:使用数组“sortlist”中定义的排序列表。 第二个条件:从小到大。
使用我当前的脚本,我已经能够以正确的顺序打印第一个条件(排序列表)的值,但我不知道如何应用第二个排序条件(从最小到最大)。
ruby -e'
values = [ "Ghu_1","Prw_1","Prw_3","Prw_5","Vep_3","Hom_2","Vep_1","Hom_1","Prw_2","Vep_2","Prw_4" ]
sortlist = [ "Hom","Vep","Ghu","Prw" ]
sortlist.each{ |s|
values.each{ |v|
puts v if v.include?(s)
}
}'
Current Ouput # Desired output
Hom_2 # Hom_1
Hom_1 # Hom_2
Vep_3 # Vep_1
Vep_1 # Vep_2
Vep_2 # Vep_3
Ghu_1 # Ghu_1
Prw_1 # Prw_1
Prw_3 # Prw_2
Prw_5 # Prw_3
Prw_2 # Prw_4
Prw_4 # Prw_5
更新
感谢塞巴斯蒂安。优秀。
它几乎可以工作,因为我注意到如果“_”之后的字符不是数字,那么第二个排序是不正确的。例如下面的输出对于 Pwr_XXX 的值是不正确的
ruby -e'
values = [ "Ghu_Klca","Prw_Rkdg","Prw_Ceteu","Prw_Eriir","Vep_Msas23","Hom_Ttgr5","Vep_Qsccas","Hom_Ftjh","Prw_jpolq","Vep_Szbqh","Prw_Lmnajh" ]
sortlist = [ "Hom","Vep","Ghu","Prw" ]
puts sortlist.flat_map{ |s|
values.select{ |v|
v if v.include?(s)
}.sort
}'
第二次更新
我的意思是第一个排序是基于 sortlist 数组。第二种排序是基于“_”之后的字符升序。在这种情况下,Prw 值的第一个字母是 C、E、j、L 和 R。但当前输出为 C、E、L、R 和 j。所以,j 在最后,应该在 L 之后。我希望有意义。
Current output Expected output
Hom_Ftjh # Hom_Ftjh
Hom_Ttgr5 # Hom_Ttgr5
Vep_Msas23 # Vep_Msas23
Vep_Qsccas # Vep_Qsccas
Vep_Szbqh # Vep_Szbqh
Ghu_Klca # Ghu_Klca
Prw_Ceteu # Prw_Ceteu
Prw_Eriir # Prw_Eriir
Prw_Lmnajh # Prw_jpolq
Prw_Rkdg # Prw_Lmnajh
Prw_jpolq # Prw_Rkdg
【问题讨论】:
-
第二次排序不正确是什么意思?预期的输出是多少?
-
请看我的第二次更新。谢谢
标签: arrays ruby sorting multiple-conditions