ios - 如何比较数组与嵌套数组并打印匹配对,而不是匹配的值列表? (代码有助于说明)

标签 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: "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/

相关文章:

ios - `CAGradientLayer` 根据局部坐标空间定义起点和终点

ios - 从 Storyboard返回到 XIB

Javascript重置数组

C++ 缩短 wchar_t 数组

arrays - 将大数组拆分为两个数组

ios - 如何更改日期选择器当前日期文本颜色?

iphone - Cocos2d如何绘制3D图像并进行旋转?

php - 如何检查数组是否为空 - true 或 false

ios - 在谷歌地图可见区域拟合两个地理位置点

ios - 实现 SSO 返回空白 View