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

キーを使用せずにハッシュの特定の部分を反復処理するための最良の方法は何ですか?たとえば、要素10から要素20へ?Ruby1.9.3を使用します。

編集-デイブのコメントに応えて:
もともと私はキーを介してデータにアクセスしたかった(したがってハッシュ)。しかし、要素番号で繰り返したいとも思います。ところで、各要素はハッシュです。

では、要素番号で繰り返したり、キーでアクセスしたりできるハッシュのハッシュまたはハッシュの配列を設計するための最良の方法は何でしょうか。データは次のようになります。欠落している日付があります。

2011年6月23日->5、6、8、3、62011年6月26日->6、8、4、8、52011年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

そのためには配列を使用する方が良いと思います(Ruby 1.9.3のハッシュは順序付けられていますが、アクセス方法が鍵です)。それで:

a = h.values
# or
a = h.to_a
于 2012-06-23T13:43:45.743 に答える
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 に答える
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 に答える