如何在Ruby中的散列的一部分重复?(How to iterate over part of a h

2019-07-30 01:52发布

h = Hash.new
(1..100).each { |v| h.store(v * 2, v*v) }

什么是遍历散列不使用钥匙给定部分的最佳方式? 例如,来自元件10元件20? 使用Ruby 1.9.3。

编辑 - 为应对戴夫的评论:
本来我想通过访问密钥的数据(因此哈希)。 但我也想通过元素数量进行迭代。 顺便说一句,每个元素是一个哈希值。

那么,什么是设计哈希散列或数组的哈希值,可以通过元素数量被重复或键来访问的最佳方式? 数据如下所示。 有缺少的日期。

6/23/2011 - > 5,6,8,3,6
2011年6月26日 - > 6,8,4,8,5
6/27/2011 - > 8,4,3,2,7

Answer 1:

如果我知道你要问什么,你可以按照如下遍历您的散列的一部分。 这使您通过第2000值1001个:

h.keys[1000..1999].each do |key|
    # Do something with h[key]
end


Answer 2:

我想你最好使用数组为(Ruby的1.9.3哈希是有序的,但访问方法是关键)。 所以:

a = h.values
# or
a = h.to_a


Answer 3:

将其转换为一个数组,然后切片它:

h.to_a[10..20].each { |k, v| do_stuff }

需要注意的是Ruby 1.9的,在散元素的顺序不能保证之前,所以这不一定会像您期望的工作。

另外,您也可以使用each_with_index并跳过不必要的元素:

h.each_with_index do |(k, v), i|
  next unless (10..20).include?(i)
  # do stuff
end


Answer 4:

h = Hash.new
(1..100).each { |v| h.store(v * 2, v*v) }

#for an array of arrays
h.drop(9).take(10) #plus an optional block
#if the slice must be a hash:
slice = Hash[h.drop(9).take(10)]

但是,如果这是一个经常重复的操作,你可能会更好使用一个数据库。



文章来源: How to iterate over part of a hash in Ruby?