saw*_*awa 50
Hash[original_hash.to_a.sample(n)]
Run Code Online (Sandbox Code Playgroud)
对于Ruby 2.1,
original_hash.to_a.sample(n).to_h
Run Code Online (Sandbox Code Playgroud)
izo*_*ica 35
我不知道这种方法.你仍然可以这样做:
h[h.keys.sample]
Run Code Online (Sandbox Code Playgroud)
如果您需要对多个元素进行采样,则代码必须更复杂一些.
编辑:获取键值对而不是只能使用以下值的值:
keys_sample = h.keys.sample(n)
keys_sample.zip(keys_sample.map{|k| h[k])
Run Code Online (Sandbox Code Playgroud)
阅读排名靠前的答案,我会选择它取决于:
如果您只想从哈希中采样一个元素,@Ivaylo Strandjev 的解决方案仅依赖于哈希查找和Array#sample:
hsh[hsh.keys.sample]
Run Code Online (Sandbox Code Playgroud)为了对多个哈希元素进行采样,@sawa 的回答利用了Array#to_h:
hsh.to_a.sample(n).to_h
Run Code Online (Sandbox Code Playgroud)请注意,正如@cadlac 所提到的,hsh.to_a.sample.to_h不会按预期工作。它会提高
TypeError: wrong element type String at 0 (expected array)
Run Code Online (Sandbox Code Playgroud)
因为Array#sample在这种情况下只返回元素数组,而不是包含元素数组的数组。
解决方法是他的解决方案,提供一个n = 1作为参数:
hsh.to_a.sample(1).to_h
Run Code Online (Sandbox Code Playgroud)
PS:不是在寻找赞成票,只是将其添加为对 Ruby 新手的解释。
| 归档时间: |
|
| 查看次数: |
15708 次 |
| 最近记录: |