2016-01-16 24 views
2

我試圖檢索Facebook朋友列表並顯示用戶,如果他跟隨另一個用戶或不。爲此,我使用FacebookID存儲在解析後端上,當用戶單擊Follow按鈕時,我將他的FacebookId添加到解析中的鍵值「following」。稍後,我將檢索以下關鍵數組,並顯示currentUser正在跟蹤或未跟蹤的用戶。將字典鍵與數組進行比較以提取匹配和不匹配的數據

我的好友列表:

var friend = ["902165525": "John", "10204125099": "Sam", "153822": "Sandy", "475585616": "Nito"] 

我下面:

var follow = ["10204125099", "153822"] 

現在我想提取friend陣列在那裏我可以看到朋友說我「不跟隨」,即else塊。

wantToGetThis -> ["902165525": "John", "475585616": "Nito"] 

我所是,

func check() { 

    for all in self.follow { 

     for (key, value) in friend { 

      if key.containsString(all) { 

       print("Yes: \(key), \(value)") 

      } else { 
       print("No: \(key), \(value)") 

      } 
     } 
    } 
} 

這是我得到if循環

Yes: 10204125099, Sam 

Yes: 153822, Sandy 

這是我得到else循環

No: 153822, Sandy 

No: 902165525, John 

No: 475585616, Nito 

No: 902165525, John 

No: 10204125099, Sam 

No: 475585616, Nito 

爲什麼我是ge tting桑迪和薩姆在else塊和多個約翰和尼託?這裏有什麼問題?

+0

您是否嘗試*調試*您的代碼?設置一個斷點和單步?執行的哪一點不符合你的期望? –

+1

通常你會檢查一組(朋友)是否包含子集(跟隨)而不是相反。 – vadian

回答

1

你不應該在內循環中打印任何東西。相反,你應該用它來查看是否有任何項目匹配從外環當前的一個,並打印出結果後,循環結束:

for (key, value) in friend { 
    var found = false 
    for all in self.follow { 
     if key == all { 
      found = true 
      break 
     } 
    } 
    if found { 
     print("Yes: \(key), \(value)") 
    } else { 
     print("No: \(key), \(value)") 
    } 
} 

注意,循環的順序也應該被改變:在內部循環應該變爲外部,以便在內部循環結束後保留​​對keyvalue的訪問。

+0

我很抱歉,但如果我不使用內部循環,我將如何訪問「鍵」和「值」? –

+1

@ Riding.Driving你需要翻轉你的循環,外部循環進入。 – dasblinkenlight

+0

我只是在發佈你之後做到了。有效。我有一個問題,隨着數組大小的增加,哪一個更有效?我在這個問題中請求的for循環的一個或者上面使用過濾器發佈的@vadian? –

1

斯威夫特的filter函數可以應用於字典,鍵/值對被視爲元組。

let peopleIFollow = friend.filter{ follow.contains($0.0) } 
let peopleIDontFollow = friend.filter{ !follow.contains($0.0) } 
for person in peopleIFollow { 
    print("I follow \(person.0) \(person.1)") 
} 
for person in peopleIDontFollow { 
    print("I don't follow \(person.0) \(person.1)") 
} 
+0

謝謝你。我現在有兩個選項,一個來自你,另一個來自下面的@dasblinkenligh。隨着陣列尺寸的增加,您認爲哪一種效率更高? –

+0

我不知道。在這種情況下,有兩個單獨的過濾器操作,這個循環似乎是更有效的解決方案。你可以在操場上找出它:創建一個巨大的數組,並通過時間戳測量這兩個選項。 – vadian

相關問題