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

mar*_*cgg 12 ruby hash

我们来看这个例子:

d = {"a" => 1, "b" => 2, "c" => 3, "d" => 4}
Run Code Online (Sandbox Code Playgroud)

由于散列现在订购,我可能想从获取数据ab或者从cd.问题是我不能做d[0..1]d[2..3].

但我可以这样做:

irb > d.to_a[0..1]
=> [["a", 1], ["b", 2]] 
Run Code Online (Sandbox Code Playgroud)

...但是这感觉很麻烦,我不想把我的哈希用于这样的操作.

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

# Holy Grail
irb > d[0..1]
=> {"a" => 1, "b" => 2}
Run Code Online (Sandbox Code Playgroud)

我可以看到如何编程自己这样的方法,但可能有一些本机已经完成,我可以使用...?

Duo*_*SRX 7

那么你可以这样做:

> a = {"a" => 1, "b" => 2, "c" => 3, "d" => 4}
> a.slice(*a.keys[0..1])
=> {"a" => 1, "b" => 1}
Run Code Online (Sandbox Code Playgroud)

至少哈希没有投射,但在我看来它仍然不是很优雅.

  • `Hash#values_at`将如何返回一个hash ..它将仅将键的值作为数组返回.请参阅[Ruby API](http://www.ruby-doc.org/core/Hash.html#method-i-values_at). (4认同)