首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法让"Vitamin B12“不在"Vitamin B6”前面?

有没有办法让"Vitamin B12“不在"Vitamin B6”前面?
EN

Stack Overflow用户
提问于 2011-04-19 12:35:51
回答 1查看 167关注 0票数 2

在Ruby on Rails中,缺省排序顺序为

代码语言:javascript
运行
复制
Vitamin A
Vitamin B12
Vitamin B6

是否有一种机制或快速方法可以让它以自然语言的方式排序,以便在B12之前显示B6

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-19 12:45:26

尝试如下所示:

代码语言:javascript
运行
复制
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"]

它按数字和非数字交替排序。

代码语言:javascript
运行
复制
b = ['3c17d', '1a34be',  '3x1a', '1b01c', '1a34bb']
p b.smart_sort

# => ["1a34bb", "1a34be", "1b01c", "3c17d", "3x1a"]

这可能类似于在Windows中对目录中的文件名进行排序时所做的操作。

更新:更新版本。不需要' '+,因为它由split自动提供。它还消除了在正则表达式中指定互补\d\D的冗余。

代码语言:javascript
运行
复制
class Array
  def smart_sort
    sort_by{|s| s.split(/(\d+)/).each_slice(2).flat_map{|s, d| [s, d.to_i]}}
  end
end
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5711640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档