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

在不使用键的情况下迭代哈希的给定部分的最佳方法是什么?例如,从元素 10 到元素 20?使用 Ruby 1.9.3。

编辑 - 回应戴夫的评论:
最初我想通过键访问数据(因此是哈希)。但我也想按元素编号进行迭代。顺便说一句,每个元素都是一个哈希。

那么,设计可以通过元素编号迭代或通过键访问的散列散列或散列数组的最佳方法是什么?数据如下所示。缺少日期。

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

4

4 回答 4

4

如果我理解您的要求,您可以按如下方式迭代您的一部分哈希。这为您提供了第 1001 到第 2000 个值:

h.keys[1000..1999].each do |key|
    # Do something with h[key]
end
于 2012-06-23T22:50:26.847 回答
1

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

a = h.values
# or
a = h.to_a
于 2012-06-23T13:43:45.743 回答
1
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)]

但是,如果这是一个经常重复的操作,那么最好使用数据库。

于 2012-06-23T21:36:19.103 回答
1

将其转换为数组,然后对其进行切片

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
于 2012-06-23T14:03:55.130 回答