Rubyで配列を長さと英数字でソートしようとしています:
望ましい順序は次のとおりです。
- site.com?page=7
- site.com?page=8
- site.com?page=9
- site.com?page=880
私はarray.sortとsortを試してきました!しかし、8 の次は 880 を配置するため、誰も成功していないようです。
これを最も効果的な方法で行うにはどうすればよいですか?
配列があるとしましょう:
a = ["site.com?page=7", "site.com?page=8", "site.com?page=9", "site.com?page=880"]
次に、次のことができます。
a = a.sort_by{|t| t.split(/page=/)[1].to_i}
to_i
つまり、カスタムの並べ替え基準を使用します。その基準は、文字列を「page =」で分割し、最初に一致した文字列の数値( )をpage=
並べ替えに使用することです。
この関数を使用して、group_by
アイテムを長さでsort_by
グループ化し、グループ内で英数字順に並べ、最後にグループを平坦化できます。
list.group_by {|i| i.length}.sort_by{|i| i.first}.collect {|i| i.last.sort}.flatten