Ruby-Hash表的sort_by方法

原创 2015年11月19日 20:28:19

经常会遇到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"]


但是,如果我们想指定Hash表中比较的元素,就要用到sort_by方法,比如要处理下面的复杂点的内嵌的hash表:

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 => 25

people.sort_by do |k|
  k[1]
end
# => [[:brother, "18"], [:me, "23"], [:sister, "25"]]


在这里,sort_by提取出来的k是数组,所以k[1]就代表着年龄值。可以看出来,:me => 23 在hash内部是一个数组,数组第一个值是键,第二个是值。




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

ruby on rails 中数组排序sort_by用法

Array 数组的排序ruby 中数组的用处很多,数组中的元素可以是数字、字符、哈希、数组等1、单属性排序a = [1,4,5,7,3,2,8]a.sort_by do |p| p end输出...

ruby中的Hash排序

ruby API中的sort和sort_by方法可以很好的帮助我们对Hash进行排序: For example: h={'a'=>2, 'c'=>1, 'b'=>3} sort 方法: ...

Ruby 如何排序Hash数组

问题:对于Hash array,如何按照每个array的某一项进行p

ruby 中的sort 和 sort_by

在Rails里,我们可以用sort_by方法对一个Ruby对象数组按照某个属性 进行排序 User.all.sort_by{|u| u.created_at} 上面的写法等效于 ...

ruby--Hash方法汇总

一。给Hash添加默认值 : h = {1,2,3,4}    #=> {1 => 2, 3 => 4}    ...

Ruby-自定义迭代器与yield方法

自定义迭代器each_with_custom_index和浅显的理解关于yield方法

javascript 数组排序sort方法和自我实现排序方法的学习小结 by FungLeo

前言针对一个数组进行排序,一个很常见的需求.尤其在后端.当然,前端也是有这个需求的.当然,数组排序,是有现成的方法的.就是sort()方法.我们先开看下这个.标准答案,sort方法var arr = ...

普通表的Join 三种算法(join 一) 嵌套循环Join(Nested Loops Join)、排序合并Join(Sort-Merge Join)和哈希Join(Hash Join)

refer to http://mysun.iteye.com/blog/1748473 通过Map-Reduce实现Join系列之一 本系列的开篇在提到使用Map-Reduce实现Join之前,...
  • G7N3F
  • G7N3F
  • 2016-01-18 16:58
  • 1153

表的连接方式:NESTED LOOP、HASH JOIN、SORT MERGE JOIN(修改)

表连接方式及使用场合 NESTED LOOP 嵌套循环连接        由两个for循环组成。不管什么连接,本算法都可以使用。连接的两个关系,分别称之为外层关系和内层关系,把数据块数大的关系作...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)