Ios 如何比较数组和嵌套数组并打印匹配对,而不是匹配值的列表?(代码帮助解释)

Ios 如何比较数组和嵌套数组并打印匹配对,而不是匹配值的列表?(代码帮助解释),ios,arrays,swift,swift5,Ios,Arrays,Swift,Swift5,我不确定如何用文字表达,但代码应该会有所帮助 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: "W

我不确定如何用文字表达,但代码应该会有所帮助

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 "

我尝试的方法是首先创建一个名称数组:[String],然后对朋友执行相同的操作,使用以下函数将[[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”],我不确定从这里到哪里才能得到我想要的结果,即识别匹配对,而不仅仅是匹配对的列表


谢谢

据我所知,您正试图找到任何其他人的
好友
数组中包含的每个人

for person in people {
    let others = people.filter {$0 != person}

    for other in others {
        if other.friends.contains(person.name) {
            print("\(person.name) is in the same social circle as \(other.name)")
        }
    }
}
People
model类必须符合
equalable
才能执行上述操作

struct Person {
    let name: String
    let friends: [String]
}


这会打印出来

萨姆和汤姆在同一个社交圈

汤姆和萨姆在同一个社交圈

亚当和威廉在同一个社交圈

威廉和亚当在同一个社交圈


如果People不符合equalable
People.filter{$0.name!=person.name}
@LeoDabus您知道我如何将其放入函数并返回可以放入这些变量的值:State var AlertStatement:String,和状态变量警报:Bool@Jithin你知道我如何将其放入函数并返回可以放入这些变量的值吗:State var AlertStatement:String,和State var AlertOn:bool只需创建一个空字符串数组,并将字符串附加到该数组中,而不是打印it@LeoDabusprint语句所在的位置我已经放置了AlertStatement.append((drug.name)与(inter.name)在同一社交圈中),但变量仍然是空字符串?
for person in people {
    let others = people.filter {$0 != person}

    for other in others {
        if other.friends.contains(person.name) {
            print("\(person.name) is in the same social circle as \(other.name)")
        }
    }
}
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)
}