给定任意长度的哈希值,我如何仅返回一些键值对(作为新的哈希值),直到以整数给出的某个点?
例如:
hash = {a: 6, b: 2, c: 1, d: 5, e: 3, f: 4}
desiredlength = 3
desiredoutput = hash = {a: 6, b: 2, c: 1}
(在我的示例中,我故意将哈希值指定为随机数,因为我想要一种不依赖于 .sort 等值的内容的方法,而只依赖于它们在哈希中出现的顺序)
这看起来应该很简单,但我还没有找到好的方法。
我确实想出了这个方法:
Hash[hash.to_a[0, desiredlength]]
这将获取原始哈希值,将其转换为数组,并将 0 到desiredlength 的范围转换回哈希值
...但感觉超级笨重,rubocop 不喜欢它
与 Ruby 中的许多事情一样,有不止一种方法可以做到这一点。
这是一个:
hash = {a: 6, b: 2, c: 1, d: 5, e: 3, f: 4}
hash.first(3).to_h
#=> {:a=>6, :b=>2, :c=>1}
# Or, similarly:
Hash[hash.first(3)]
Enumerable#first
。
这是另一种方法:
hash = {a: 6, b: 2, c: 1, d: 5, e: 3, f: 4}
desiredlength = 3
hash.take(desiredlength).to_h