免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6384 | 回复: 7
打印 上一主题 下一主题

字符串和数字混合的数组如何排序? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-26 21:00 |只看该作者 |倒序浏览
数组是字符串和数字混合的
array01
=> ["zero", "one", "two", "three", "dos", "tre", 0, 10, 2]

直接sort排序失败。
irb(main):057:0> array01.sort
ArgumentError: comparison of String with 2 failed
        from (irb):57:in `sort'
        from (irb):57
        from /usr/bin/irb:12:in `<main>'

求问如何做?

论坛徽章:
0
2 [报告]
发表于 2010-12-26 23:46 |只看该作者
你预期是什么样的结果呢?

  1. >> a = ["zero", "one", "two", "three", "dos", "tre", 0, 10, 2]
  2. => ["zero", "one", "two", "three", "dos", "tre", 0, 10, 2]
  3. >> a.sort_by {|i| i.to_s}
  4. => [0, 10, 2, "dos", "one", "three", "tre", "two", "zero"]
  5. >> a.sort_by {|i| i.to_i}
  6. => ["zero", "one", "two", "three", 0, "tre", "dos", 2, 10]
复制代码

论坛徽章:
0
3 [报告]
发表于 2010-12-27 02:03 |只看该作者
回复 2# Sapien



多谢。!!!!

论坛徽章:
0
4 [报告]
发表于 2010-12-27 08:29 |只看该作者
Sapien回复滴挺快的。

论坛徽章:
0
5 [报告]
发表于 2010-12-28 12:34 |只看该作者
回复  Sapien



多谢。!!!!
laohuanggua 发表于 2010-12-27 02:03



    不用sort_by也可以:
irb(main):024:0> a
=> ["zero", "one", "two", "three", "dos", "tre", 0, 10, 2]


irb(main):025:0> a.map{|s| [s.to_s,s]}.sort{|x,y| x[0]<=>y[0]}.map{|e| e[1]}
=> [0, 10, 2, "dos", "one", "three", "tre", "two", "zero"]

论坛徽章:
0
6 [报告]
发表于 2010-12-28 13:04 |只看该作者
不用sort_by也可以:
zuerrong 发表于 2010-12-28 12:34



   这个,有点绕远路了啊。

  1. >> a
  2. => ["zero", "one", "two", "three", "dos", "tre", 0, 10, 2]
  3. >> a.sort { |x,y| x.to_s <=> y.to_s }
  4. => [0, 10, 2, "dos", "one", "three", "tre", "two", "zero"]
复制代码
用这个效率比 sort_by 低,每次两两比对的时候2个元素都要执行一遍 to_s,而前者每个元素只需执行一遍 to_s。

论坛徽章:
0
7 [报告]
发表于 2010-12-28 14:05 |只看该作者
这个,有点绕远路了啊。用这个效率比 sort_by 低,每次两两比对的时候2个元素都要执行一遍 to_s, ...
Sapien 发表于 2010-12-28 13:04



    不是绕远路,sort_by内部就是这么实现的,不过是用C实现的,看ruby cookbook.

论坛徽章:
0
8 [报告]
发表于 2010-12-29 21:40 |只看该作者
Ruby的方法实现,本来就像Perl一样,甚至比Perl还多。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP