kev*_*ler 3 ruby arrays sorting ruby-on-rails
我需要在Ruby中对混合数组进行排序.它有Fixnums和Strings
ar = [1, "cool", 3, "story", 4, "bro"]
我希望Fixnums优先于字符串,而不关心字符串的顺序.
ar = [1,3,4,"cool","story","bro"]
我试过写一个方法 class Array
Class Array
def mixed_sort
self.sort do |a,b|
if a.class == Fixnum and b.class != a.class
-1
else
a <=> b
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
我想我可能只是将一个块传递给该Array#sort方法.但是,此方法在按下块之前仍会引发错误
[1] pry(main)> [1, "11", '12', 3, "cool"].mixed_sort
ArgumentError: comparison of String with 3 failed
from /config/initializers/extensions/array.rb:3:in `sort'
Run Code Online (Sandbox Code Playgroud)
我会做如下使用Enumerable#grep:
ar = [1, "cool", 3, "story", 4, "bro"]
ar.grep(Fixnum).sort + ar.grep(String)
# => [1, 3, 4, "cool", "story", "bro"]
Run Code Online (Sandbox Code Playgroud)
如果您还想对字符串进行排序,请执行以下操作:
ar = [1, "cool", 3, "story", 4, "bro"]
ar.grep(Fixnum).sort + ar.grep(String).sort
# => [1, 3, 4, "bro", "cool", "story"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1159 次 |
| 最近记录: |