我试图通过长度和字母数字排序在红宝石的数组:排序红宝石数组作为字母数字
的期望的顺序将是:
- site.com?page=7
- 站点.COM?页= 8
- site.com?page=9
- site.com?page=880
我一直在尝试array.sort并进行排序!但他们似乎都没有做到这一点,因为他们会在8点之后放置880.
我该如何去做这个最有效的方法?
我试图通过长度和字母数字排序在红宝石的数组:排序红宝石数组作为字母数字
的期望的顺序将是:
我一直在尝试array.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}
总之我使用自定义排序标准,这个标准是由“网页分割字符串= “,然后使用page=
的第一个匹配后的字符串的数值(to_i
)进行排序。
可以通过长度使用group_by
功能组项目和sort_by
它们字母数字组内订购,最后压平基团:使用固定
list.group_by {|i| i.length}.sort_by{|i| i.first}.collect {|i| i.last.sort}.flatten
的一般技巧是零垫数排序数组字符串之前的小数位数。
这可以通过下面的代码很容易地完成:
a = ["site.com?page=9","site.com?page=880""site.com?page=8","site.com?page=7"]
N = 5 # Maximum number of decimal places allowed
a.sort_by { |s| s.gsub(/(\d+)/) { |n| sprintf("%0#{N}d", n.to_i) } }
这非常适用,除非字符串包含任意数量大于或等于10^N。
谢谢。虽然恐怕我应该发布整个URI,因为页面只是其中的一个。还有可能做些什么吗? – charliexx 2013-02-21 20:21:30