Ruby 自然排序/顺序

标签 ruby ruby-on-rails-3 sorting ruby-on-rails-3.2

我正在使用 Challonge API 和查询锦标赛时,每场比赛都会返回 indentifier=这是A-Z。在前 26 个匹配项之后,标识符变为 AA-AZ然后 BA-BZ

当提取单个锦标赛的整个比赛列表并尝试使用 .sort_by 时在标识符上,结果排序为:

A AA AB AC ... B BA BB BC ... C ...

为了正确显示匹配项,它们需要按以下顺序排列:

A B C ... AA AB AC ... BA BB BC ...

我花了一些时间进行搜索,但找不到任何真正简单的方法来实现这一点。我发现的大多数帖子都涉及文件名或编号,我不确定如何将其应用于这种情况。

如有任何帮助,我们将不胜感激!

编辑

这是一个示例响应:

[{"match":{"created_at":"2013-01-09T23:25:22-05:00","has_attachment":false,"id":8148294,"identifier":"CK","loser_id":null,"player1_id":null,"player1_is_prereq_match_loser":true,"player1_prereq_match_id":8148251,"player1_votes":null,"player2_id":null,"player2_is_prereq_match_loser":false,"player2_prereq_match_id":8148293,"player2_votes":null,"round":-9,"started_at":null,"state":"pending","tournament_id":320424,"updated_at":"2013-01-09T23:25:25-05:00","winner_id":null,"prerequisite_match_ids_csv":"8148251,8148293","scores_csv":""}}

你可以看到 "indentifier":"CK"在那里。使用 .length 时我不断收到 undefined method 'length' .在我使用的 Controller 中 @tournamentlist = tournamentlist.matches.sort...

最佳答案

或者只是:

ids = ["AA", "A", "C", "CA", "CCC"]
ids.sort { |a,b| [a.length, a] <=> [b.length, b] }
#=> ["A", "C", "AA", "CA", "CCC"]

或者,使用 sort_by ,甚至更短:

ids.sort_by { |a| [a.length, a] }

引用:How can I sort by multiple conditions with different orders?

关于Ruby 自然排序/顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14272002/

相关文章:

ruby - `selenium-webdriver` ruby​​ gem 无法与 Ubuntu 14.04 上的 chromedriver 连接

ruby-on-rails - redirect_to 在 rails 中使用 POST

ruby-on-rails-3 - 将 Rails 应用程序从 1.2.3 升级到 3.1.0?

Javascript数组排序问题

java 二维数组二次​​排序

ruby - 单引号与双引号

c# - 这个逻辑运算符有捷径吗?

ruby-on-rails-3 - 关于 Google Analytics 跟踪(使用 Rails)的问题

ruby-on-rails - 如何在 Rails 中添加插件?

iOS 根据浮点值排序数组