Ruby:返回给定长度的键值对的哈希值

问题描述 投票:0回答:3

给定任意长度的哈希值,我如何仅返回一些键值对(作为新的哈希值),直到以整数给出的某个点?

例如:

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
3个回答
3
投票
hash = {a: 6, b: 2, c: 1, d: 5, e: 3, f: 4}
desiredlength = 3
hash.select { (desiredlength -= 1) >= 0 }
  #=> {a: 6, b: 2, c: 1 }

参见 哈希#select


另一种方式:

hash.slice(*hash.keys.first(desiredlength))
  #=> {a: 6, b: 2, c: 1 }

参见 哈希#slice


3
投票

与 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


1
投票

这是另一种方法:

hash = {a: 6, b: 2, c: 1, d: 5, e: 3, f: 4}
desiredlength = 3

hash.take(desiredlength).to_h
© www.soinside.com 2019 - 2024. All rights reserved.