我们来看这个例子:
d = {"a" => 1, "b" => 2, "c" => 3, "d" => 4}
Run Code Online (Sandbox Code Playgroud)
由于散列现在订购,我可能想从获取数据a到b或者从c到d.问题是我不能做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)
我可以看到如何编程自己这样的方法,但可能有一些本机已经完成,我可以使用...?
那么你可以这样做:
> 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)
至少哈希没有投射,但在我看来它仍然不是很优雅.