我不确定如何将它写成文字,但是代码应该会有所帮助。
var People = [
.init(name: "Sam", friends: ["James", "Tom", "Rick"]),
.init(name: "Tom", friends: ["Callum", "Steve", "Sam"]),
.init(name: "Adam", friends: ["Harry", "Diane", "William"]),
.init(name: "William", friends: ["Rodger", "Adam", "Bill"]),
.init(name: "Guy", friends: ["Zack", "Frank", "Cody"])
]
我想生成一个打印警报
" Sam is in the same social circle as Tom " / " Tom is in the same social circle as Sam "
和
" Adam is in the same social circle as William " / " William is in the same social circle as Adam "
和
" Guy has no common social circles "
我尝试过的方法是先创建一个名称数组:[String],然后对 friend 做同样的事情,使用以下函数将[[String]]转换为[String] ...
func loadNamesArray() -> [String] {
return self.People.map { $0.name }
}
func loadFriendsArray() -> [String] {
let arrayOfFriends = self.People.map { $0.friends }
let friends = arrayOfFriends.flatMap { $0 }
return friends
}
然后,我交叉比较了两个数组,以警告使用此功能的任何普通人...
func loadCommonInteractingArray() -> [String] {
let output = loadNamesArray().filter{ loadFriendsArray().contains($0) }
return output
}
但这只会返回[“Sam”,“Tom”,“Adam”,“William”],而且我不确定从哪里可以得到想要的结果,即识别匹配对,而不只是列表那些匹配。
谢谢
最佳答案
struct Person {
let name: String
let friends: [String]
}
var people: [Person] = [
.init(name: "Sam", friends: ["James", "Tom", "Rick"]),
.init(name: "Tom", friends: ["Callum", "Steve", "Sam"]),
.init(name: "Adam", friends: ["Harry", "Diane", "William"]),
.init(name: "William", friends: ["Rodger", "Adam", "Bill"])]
func loadCommonInteracting(in people: [Person]) -> [String] {
var connections: [String] = []
people.forEach { person in
let friends = people.filter{ $0.friends.contains(person.name) }
for friend in friends {
connections.append("\(person.name) is in the same social circle as \(friend.name)")
}
}
return connections
}
let connections = loadCommonInteracting(in: people)
for connection in connections {
print(connection)
}
这将打印山姆和汤姆在同一个社交圈
汤姆和山姆在同一个社交圈
亚当与威廉处于同一个社交圈
威廉与亚当处于同一个社交圈
关于ios - 如何比较数组与嵌套数组并打印匹配对,而不是匹配的值列表? (代码有助于说明),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61162103/