يمنحني ملء صفيف مع تجزئة من كل كتلة/do جميع القيم المتكررة .. help!

StackOverflow https://stackoverflow.com/questions/4061920

سؤال

أحاول ملء مجموعة من التجزئة مع التجزئة التي تم إنشاؤها من خلال كل حلقة ، إذا قمت بطباعة كل تجزئة فردية في التكرار ، فهي متميزة ، لكن عندما أحاول دفعها إلى صفيف ، فإن الصفيف الناتج قد كرر آخر تجزئة أي شيء عدد الاوقات. هذا هو الرمز:

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

لقد نظرت في كل مكان ، لكن لا يمكنني العثور على ما أفعله خطأ (ربما تكون مشكلة غبية ولكنها تتعثر في هذا المبتدئ ..) سأقدر أي مساعدة!

هل كانت مفيدة؟

المحلول

لا يوجد سوى تجزئة واحدة tweet تم إنشاؤها من أي وقت مضى ، وقيمها مكتوبة فقط. يجب عليك تعيين tweet = {} داخل الحلقة.

نصائح أخرى

يولي على حق. تفسير أكثر قليلاً:

المتغير هو إشارة إلى كائن في روبي. أنت رمز تقوم بإنشاء كائن تجزئة واحد وتشير إليه مع tweet متغير ، ثم داخل الحلقة ، تمنحها بعض القيم وتُفسدها إلى الصفيف. في المرة القادمة التي من خلال الحلقة ، تقوم بتعيين قيم جديدة على ذلك نفس تويت كائن ، وإلحاقه مرة أخرى. الآن يشير كلا العنصرين في صفيفك إلى نفس الكائن مع هذا المجموعة الجديدة من القيم. وهكذا على وهكذا في كل مرة. انتهى الأمر بمجموعة مليئة بالإشارات إلى نفس الكائن ، والتي تحتوي على القيم التي قمت بتعيينها في التكرار الأخير من خلال الحلقة.

كما قال يولي ، تعيين tweet = {} داخل الحلقة سوف تنشئ أ الجديد كائن التجزئة في كل مرة ، وهو ما تتوقعه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top