我正在尝试检索Facebook好友列表并显示用户是否跟随其他用户。为此,我使用存储在解析后端的FacebookID,当用户点击“关注”按钮时,我将他的FacebookId添加到解析中的“关注”键值。稍后我将检索以下关键数组并显示当前用户正在关注或未关注的用户。
我的朋友名单:
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
为什么我会在else
区块和多个John和Nito中获得Sandy和Sam?这里有什么问题?
答案 0 :(得分: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)")
}
}
请注意,循环的顺序也应该更改:内部循环应该变为外部,以便在内部循环结束后保留对key
和value
的访问权限。
答案 1 :(得分:1)
Swift的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)")
}