在Ruby on Rails中,缺省排序顺序为
Vitamin A
Vitamin B12
Vitamin B6
是否有一种机制或快速方法可以让它以自然语言的方式排序,以便在B12
之前显示B6
发布于 2011-04-19 12:45:26
尝试如下所示:
class Array
def smart_sort
sort_by{|s| (' '+s).scan(/(\d+)|(\D+)/).map{|d, s| s || d.to_i}}
end
end
a = ['Vitamin A', 'Vitamin B12', 'Vitamin B6']
p a.smart_sort
# => ["Vitamin A", "Vitamin B6", "Vitamin B12"]
它按数字和非数字交替排序。
b = ['3c17d', '1a34be', '3x1a', '1b01c', '1a34bb']
p b.smart_sort
# => ["1a34bb", "1a34be", "1b01c", "3c17d", "3x1a"]
这可能类似于在Windows中对目录中的文件名进行排序时所做的操作。
更新:更新版本。不需要' '+
,因为它由split
自动提供。它还消除了在正则表达式中指定互补\d
和\D
的冗余。
class Array
def smart_sort
sort_by{|s| s.split(/(\d+)/).each_slice(2).flat_map{|s, d| [s, d.to_i]}}
end
end
https://stackoverflow.com/questions/5711640
复制相似问题