0

Twitterでダイレクトメッセージできるすべての人のハッシュの配列を作成しようとしています。正しい配列は次のようになります[{id:12345,name:"john", profile_pic:"some_url"},{id:67890,name:"jim", profile_pic:"some_url"}]

all_followers と all_friends を取得して、2 つの内容を比較しています。返される各オブジェクトはハッシュの配列です。1 つの配列を反復処理して ID を取得し、次に 2 番目の配列を反復処理して、ハッシュにその ID 値が含まれているかどうかを確認しています。そうであれば、元のハッシュからいくつかの詳細を取得し、それを最終的に私のブラウザーに送信する小さなハッシュに送信します。

これを行うコードは次のとおりです。

  def get_direct_message_list(friend_list,follower_list)
    names_and_pics = []
    friend_list.each do |base|
      follower_list.each do |compare|
        if compare.has_value?(base["id"])
          block_hash = {}
          block_hash["id"] = base["id"]
          block_hash["name"] = base["name"]
          block_hash["profile_background_image_url"] = base["profile_background_image_url"]
          names_and_pics << block_hash
        end

      end
    end
    names_and_pics
  end

それは本質的に機能しています。テスト スイートは次のようになり、テストは成功しています。

  context "get_direct_message_list" do

    it "should take friends and followers and return name, pic and twitter_id in one list"  do
      followers = [{"id"=>1, "name" => "john", "profile_background_image_url" => "http://somewhere.com"}, {"id"=>2},{"id"=>3, "name" => "mike", "profile_background_image_url" => "http://somewhere.com"}]
      friends = [{"id"=>1, "name" => "john", "profile_background_image_url" => "http://somewhere.com"},{"id"=>5, "name"=>"someoneelse", "profile_background_image_url"=> "http://somewhere"},{"id"=>4},{"id"=>3, "name" => "mike", "profile_background_image_url" => "http://somewhere.com"}]

      get_direct_message_list(friends, followers).should == [{"id"=>1, "name" => "john", "profile_background_image_url" => "http://somewhere.com"},{"id"=>3, "name" => "mike", "profile_background_image_url" => "http://somewhere.com"}]
    end
  end

私の問題は、返される配列に奇妙な重複があることです。具体的には、12 と 13 の Twitter ID、ビズ ストーンとジャック ドーシー、どちらも私をフォローしていません。それらはそれぞれ、最終的な配列で 3 回と 7 回複製されています。これをトラブルシューティングするために何を見ればよいのかよくわかりません。私の最初の考えは、 .has_value?`hashx.has_value?(13)の twitter id が一致が正確であることを示している場合に true を返すようなものだということでした。134567' was being encountered but further experimentation with私は何を見ることができますか?

4

1 に答える 1

2

equals内に何かがある場合、行compare.has_value?(base["id"])は戻ります。truecompare.valuesbase["id"]

例えば:

{:id => 12345, :foo => 2}.has_value?(2)
# => true

これにより、誤検知が発生する可能性があります。これが問題の根本的な原因であるかどうかを判断するのは困難ですが、compare.has_value?(base["id"]).

のようなものはどうcompare["id"] == base["id"]ですか?

于 2012-10-02T19:26:12.517 に答える