給定任意長度的散列,我如何只回傳多個鍵值對(作為新散列)直到以整數給出的某個點?
例如:
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 到所需長度的范圍轉換回散列
...但感覺超級笨重,rubocop 不喜歡它
uj5u.com熱心網友回復:
與 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)]
見:Enumberable#first。
uj5u.com熱心網友回復:
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。
uj5u.com熱心網友回復:
這是另一種方法:
hash = {a: 6, b: 2, c: 1, d: 5, e: 3, f: 4}
desiredlength = 3
hash.take(desiredlength).to_h
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/484994.html
