• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Ruby的字符串与数组求最大值的相关问题讨论

    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中数组的一些相关使用方法
    • 简单介绍Ruby on Rails对PostgreSQL数组类型的支持
    • Ruby数组(Array)学习笔记
    • Ruby教程之注释、变量声明以及数组操作
    • Ruby创建数组方法总结
    上一篇:Ruby程序中发送基于HTTP协议的请求的简单示例
    下一篇:Ruby中Time对象的常用函数总结
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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