Ruby的字符串与数组求最大值的相关问题讨论

所属分类: 脚本专栏 / ruby专题 阅读数: 1242
收藏 0 赞 0 分享

max方法

b=[1,3,55,777,2,4,6,8,0]

对于数值型的数据,max会得到数组的最大值,min得到数组的最小值

b.max => 777
b.min => 0

而对于字符串型数组比较大小没有实际意义,
ruby中给出的例子是

# enum.max         -> obj
# enum.max { |a, b| block } -> obj
#a = %w(albatross dog horse)
#a.max          => "horse"
# a.max { |a, b| a.length <=> b.length } #=> "albatross"

实际中的实验

d=%w(albatross dog horse ddd dasgfds)
d.max => "horse"

有点怪,怎么回事
为此打印了一下比较直观的数字字符串

a = ["1", "3", "55", "777", "2", "4", "6", "8", "0"]
def max(first,*rest) 
 max=first 
 rest.each do |x|
  p "---#{x}---#{max}"
  max=x if x>max 
  p "---#{x}---#{max}"
  max 
end

运行

复制代码 代码如下:
a.max

结果为

"---3---1"
"---3---3"
"---55---3"
"---55---55"
"---777---55"
"---777---777"
"---2---777"
"---2---777"
"---4---777"
"---4---777"
"---6---777"
"---6---777"
"---8---777"
"---8---8"
"---0---8"
"---0---8"
 => "8"

问题出来了,"8" > "777" => true,再测试

"7" > "777" => false
"6" > "777" => false
"9" > "777" => true
"10" > "777" => false
"11" > "777" => false
"70" > "777" => false
"80" > "777" => true

该崩溃了,规律好不友好,因为用的max这个比较大小的方法,之前认为他是通过ASCII编码判断大小的,今天看有关sort排序的问题时发现这个问题,此处其实是通过字典排序的方法取的最大值。

下面就顺便来看一下Ruby中的sort:

sort排序方法

ary.sort          -> new_ary
ary.sort { |a, b| block } -> new_ary
enum.sort_by { |obj| block }  -> array
enum.sort_by          -> an_enumerator

实例

h=['1','3','13','10','7']
 A. p h.sort
 B. p h.sort{|a,b| a.to_i <=> b.to_i}
 C. p h.sort_by{|x| x.to_i}

输出如下:

A. ["1", "10", "13", "3", "7"] 
B. ["1", "3", "7", "10", "13"] 
C. ["1", "3", "7", "10", "13"]

1.在没有指定块的时候,sort默认的排序是按着字典的顺序排序的。
2.如果指定了块,将数值进行排序是块制定方法的数值的大小排序的。
3.sort_by方法用执行块的代码所生成的结果来排序,对每个元素只执行一次块的调用,比B的效率快。

更多精彩内容其他人还在看

简要解读Ruby面向对象编程中的作用域

作用域在面向对象编程中是一个十分重要的概念,程序构建时必须要理解清楚类和方法以及对象的作用范围,接下来就为大家简要解读Ruby面向对象编程中的作用域
收藏 0 赞 0 分享

详解Ruby中的instance_eval方法及其与class_eval的对比

Ruby的eval族方法将字符串作为代码来执行,instance_eval方法便是其中之一,下面就来详解Ruby中的instance_eval方法及其与class_eval的对比
收藏 0 赞 0 分享

Ruby程序中正则表达式的基本使用教程

和Python与Perl一样,Ruby对正则表达式的支持也是相当好的,这里送出整理的Ruby程序中正则表达式的基本使用教程,需要的朋友可以参考下
收藏 0 赞 0 分享

Ruby on Rails所构建的应用程序基本目录结构总结

Ruby on Rails是Ruby世界中一家独大的Web开发框架,要掌握Rails程序的构建,对其目录结构的了解十分必要,下面就来看一下Ruby on Rails所构建的应用程序基本目录结构总结
收藏 0 赞 0 分享

Ruby中的gem包管理的使用及gem源搭建教程

RubyGems是Ruby世界中的包管理工具,gem命令使用起来就如同Linux中的apt与yum一样,也可以构建自己的gem源,下面就带大家一起来学习Ruby中的gem包管理的使用及gem源搭建教程
收藏 0 赞 0 分享

Linux下Redis数据库的安装方法与自动启动脚本分享

这篇文章主要介绍了Linux下Redis数据库的安装方法与自动启动脚本分享,自动启动脚本分别针对CentOS和Ubuntu系统来给出了编写示例,需要的朋友可以参考下
收藏 0 赞 0 分享

Ruby与Ruby on Rails框架环境搭建的简明教程

这篇文章主要介绍了Ruby与Ruby on Rails框架环境搭建的简明教程,包括RubyGems的升级与OpenSSL的支持等配置,需要的朋友可以参考下
收藏 0 赞 0 分享

Ruby编写HTML脚本替换小程序的实例分享

这篇文章主要介绍了Ruby编写HTML脚本替换小程序的实例分享,单纯使用Ruby中的字符串替换方法而没有涉及更复杂的正则表达式,需要的朋友可以参考下
收藏 0 赞 0 分享

详解Ruby中的代码块对象Proc

在Ruby中一个代码块block不是对象,但可以用Proc来替代其作为对象进行操作,接下来我们就来详解Ruby中的代码块对象Proc
收藏 0 赞 0 分享

Ruby中的Proc类及Proc的类方法Proc.new的使用解析

用Proc类可以用Proc.new来创建一个Proc类,进而来操作块,这里我们就来进行Ruby中的Proc类及Proc的类方法Proc.new的使用解析.
收藏 0 赞 0 分享
查看更多