Ruby-Hash表的sort_by方法
来源:互联网 发布:MAC编译Java 编辑:程序博客网 时间:2024/05/08 09:38
经常会遇到hash表中元素比较的问题,mark一下。
如果我要比较这个Hash表中年龄的大小:
people = { :me => 23, :brother => 18, :sister => 25}
直接用sort方法:
irb(main):025:0> people.sort=> [[:brother, 18], [:me, 23], [:sister, 25]]
ruby比较智能,可能会知道我们要比较的Fixnum对象的大小。
而且sort方法对字符串类型的也能处理:
irb(main):037:0> ["3","1","2"].sort=> ["1", "2", "3"]
people = { :me => { :name => "hen", :age => 23 }, :brother => { :name => "abb", :age => 18 }, :sister => { :name => "ndd", :age => 25 }}
我们可以这样写:
people.sort_by do |k,v| v[:age]end#=> [[:brother, {:name=>"abb", :age=>18}], [:me, {:name=>"hen", :age=>23}], [:sister, {:name=>"ndd", :age=>25}]]
sort_by提取出了两个元素k和v,k是第一层hash表的键(symbol对象),而v是第一层hash表的值(内嵌hash对象),这样v[:age]就代表着年龄值(Fixnum),块内需指明了要比较的对象,在这里是指的是Fixnum对象,还有其他String也可以,所以sort_by能正常工作。
简单验证下上面的说法:
people.sort_by do |k,v| print "#{k.class} #{v.class}\n"end# => Symbol Hash# => Symbol Hash# => Symbol Hash
回到之前的people对象,我们可以用sort_by这样写:
people = { :me => 23, :brother => 18, :sister => 25people.sort_by do |k| k[1]end# => [[:brother, "18"], [:me, "23"], [:sister, "25"]]
在这里,sort_by提取出来的k是数组,所以k[1]就代表着年龄值。可以看出来,:me => 23 在hash内部是一个数组,数组第一个值是键,第二个是值。
0 0
- Ruby-Hash表的sort_by方法
- ruby--Hash方法汇总
- [Ruby] Ruby 的hash默认值
- Ruby中Hash常用方法
- ruby on rails 中数组排序sort_by用法
- Ruby Hash的常用函数
- ruby学习笔记-hash方法汇总
- ruby学习笔记-hash方法汇总
- ruby hash
- ruby-Hash
- 构造hash表的方法
- ruby 疑问,关于hash方法的@x*31 ^ @y*13 ^ @z
- ruby中Hash的自定义key
- ruby中Hash的默认值小陷阱
- ruby类的方法
- ruby的gets()方法
- 解决hash表冲突的方法
- 树的Hash方法?
- Android 官方推荐 : DialogFragment 创建对话框
- CodeForces ---596B--Wilbur and Array(贪心模拟)
- 在Fedora 23/22, CentOS/RHEL 7.1 上安装Google Chrome的方法
- POJ---3352-Road Construction(双连通分量)
- Android进阶-子线程中刷新UI的讨论
- Ruby-Hash表的sort_by方法
- 内核态和用户态通讯知识收集
- Hadoop初探
- RollPitchYaw傻傻分不清
- zookeeper入门学习
- 第十四章指针及其运算初探~!
- Android进阶-分页与分批及XUtils的注解来代替findViewById
- Android组件之ContentProvider(内容提供者)
- 【有感】——在错误中成长