Ruby 数组排序求简单实现

grant · 2013年04月10日 · 最后由 quakewang 回复于 2013年04月10日 · 5990 次阅读

现在有个需求。

有个数组:

["jack", "tom", "alice", "mike" ]

需求如下:

我想让这个数组中的其中一个排在 top,其他按字母排序。

例如:

我想让 "mike"排第一个,其他按字母排序。mike 是可变参数。 结果如下:

["mike", "alice", "jack", "tom" ]

我想可否通过 Array 的 sort 方法,一行简单代码的搞定? 我试了写了下,搞不定。

有大神帮忙不?

sort_by ro sort 查看 ruby-doc 官方文档 array. 可以得到你想要的答案

@ginchenorlee 我看过了。。。我只求可否一行简单代码搞定,不想太复杂

3 楼 已删除

相似度排序,可以看看这个算法 Levenshtein distance

Ruby 有实现: https://github.com/anjlab/rubyfish

@kenshin54 谢谢。果然大神,但是没搞明白为什么 e.length 可以按照字母顺序排序?

array = ["jack", "tom", "alice", "mike" ] top = "mike" array.reject{|i| i==top}.sort.unshift(top)

#5 楼 @Grant 没看清需求要按字母排

a.sort do |x,y|
  if x == 'mike'
    -1
  elsif y == 'mike'
    1
  else
    x <=> y
  end
end

@kenshin54 很奇怪你之前写的代码,我在 ruby2.0 irb 测试了下,结果都是对的。不管字符长度。。。都是按字母顺序排的

#8 楼 @Grant 那是个错误用法

#6 楼 @zj0713001 谢谢。这个可以

#10 楼 @Grant 这个是偷懒的方法 把你的需求用其他方式实现了 没从排序里面做文章...

@zj0713001 是的 我其实也想到了这个方法,但如果能在 sort 的 block 里面简单的一行代码搞定就更好了

val.sort { |a,b| (a=='mike' and -1) or (b=='mike' and 1) or a<=>b }

@kenshin54 @Grant 大神的代码在哪啊

arr.sort_by {|a| a == 'mike' ? '' : a}
需要 登录 后方可回复, 如果你还没有账号请 注册新账号