我正在使用 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/