0

各ループで作成されたハッシュでハッシュの配列を埋めようとしています。反復内で個々のハッシュを出力すると、それらは区別されますが、それらを配列にプッシュしようとすると、結果の配列には最後のハッシュが繰り返されます何度か。コードは次のとおりです。

def get_tweets
  tweet_array = Array.new
  tweet = {}
  Twitter::Search.new('Accidente' || 'accidente').from('sttmed').each do |r|
    tweet["texto"] = r.text
    tweet["reportado"] = (Time.parse(r.created_at)).localtime.strftime("%B %d, %H:%M %p %Z")
    tweet["direccion"] = r.text.scan(/\w*_\w*/).join
    tweet_array << tweet
  end
  return tweet_array # RETURNS ALL REPEAT VALUES!!
end

私はどこでも見ましたが、私が間違っていることを見つけることができないようです (それはおそらくばかげた問題ですが、この初心者を困惑させています..) どんな助けにも感謝します!

4

2 に答える 2

7

これまでに作成されたハッシュは 1 つだけtweetで、その値は上書きされるだけです。tweet = {}ループ内で割り当てる必要があります。

于 2010-10-31T05:07:10.530 に答える
2

ユリー そうです。もう少し説明:

変数は、Ruby のオブジェクトへの参照です。コードは単一のハッシュ オブジェクトを作成し、それをtweet変数で参照してから、ループ内でいくつかの値を指定して配列に追加しています。次回のループでは、同じツイート オブジェクトに新しい値を設定し、再度追加します。これで、配列内の両方の項目が、その新しい値のセットを持つ同じオブジェクトを参照しています。などなど、毎回。ループの最後の反復で割り当てた値を持つ、同じオブジェクトへの参照でいっぱいの配列になります。

Yuliy が言っtweet = {}たように、ループ内で割り当てると、毎回新しいハッシュ オブジェクトが作成されます。これは期待どおりです。

于 2010-10-31T10:41:02.977 に答える