2

Rubyで配列を長さと英数字でソートしようとしています:

望ましい順序は次のとおりです。

  • site.com?page=7
  • site.com?page=8
  • site.com?page=9
  • site.com?page=880

私はarray.sortとsortを試してきました!しかし、8 の次は 880 を配置するため、誰も成功していないようです。

これを最も効果的な方法で行うにはどうすればよいですか?

4

3 に答える 3

3

配列があるとしましょう:

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=並べ替えに使用することです。

于 2013-02-21T16:04:45.420 に答える
1

この関数を使用して、group_byアイテムを長さでsort_byグループ化し、グループ内で英数字順に並べ、最後にグループを平坦化できます。

list.group_by {|i| i.length}.sort_by{|i| i.first}.collect {|i| i.last.sort}.flatten
于 2013-02-21T16:10:54.217 に答える