如何在Ruby 1.9中只获得一个有序散列的子集?

我们来看这个例子:
d = {"a" => 1,"b" => 2,"c" => 3,"d" => 4}

由于现在已经排序了哈希值,我可能需要从a到b或从c到d获取数据.问题是我不能做d [0..1]或d [2..3].

我可以做:

irb > d.to_a[0..1]
=> [["a",1],["b",2]]

…但这感觉很混乱,我不想为了这样的操作来投掷我的哈希.

有没有更清洁的解决方案来处理这个?

# Holy Grail
irb > d[0..1]
=> {"a" => 1,"b" => 2}

我可以看到如何编程自己这样一个方法,但是可能有一些本来已经完成的东西,我可以使用…?

解决方法

你可以做:
> a = {"a" => 1,"d" => 4}
> a.slice(*a.keys[0..1])
=> {"a" => 1,"b" => 1}

至少哈希不是演员,但在我看来还不是非常优雅.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...