arrays - 如何在枚举器 Swift 中使用 contains(where:)
问题描述
我找不到带有枚举器的 contains(where:) 的语法示例。
我正在尝试映射数组 1 和数组 2 以查看是否有任何重复并更新它。如果不附加无重复部分。
struct Info {
var id: Int
var info: String
}
var arrayOne: [Info] = [Info(id: 0, info: "I don't like cake"),
Info(id: 2, info: "I love soda")]
var arrayTwo: [Info] = [Info(id: 0, info: "I love cake"),
Info(id: 1, info: "I love chocolate"),
Info(id: 2, info: "I love Milk")]
for arr in arrayOne {
if arrayTwo.enumerated().contains(where: (index, element) in
// checking $0.id == arr.id is true
// then update the array arrayTwo[index] = arr
} else {
arrayTwo.append(arr)
}
}
解决方案
你的代码都不是合法的 Swift。我假设你的意思是:
struct Info {
var id: Int
var info: String
}
var arrayOne: [Info] = [Info(id: 0, info: "I don't like cake"),
Info(id: 2, info: "I love soda")]
var arrayTwo: [Info] = [Info(id: 0, info: "I love cake"),
Info(id: 1, info: "I love chocolate"),
Info(id: 2, info: "I love Milk")]
鉴于此,contains(where:)
对于您要解决的问题没有用处。您不能仅基于知道数组包含一个值来更新;您需要知道值的实际位置。为此你想要firstIndex(where:)
。
for arr in arrayOne {
// Find a matching index
if let index = arrayTwo.firstIndex(where: { $0.id == arr.id }) {
// And if it exists, replace it
arrayTwo[index] = arr
} else {
// Otherwise, append
arrayTwo.append(arr)
}
}
推荐阅读
- javascript - 如何将 PostCSS 的 CSS 解析器嵌入到网页中?
- google-maps - Xamarin Forms GoogleMaps 数据从列表到固定和信息窗口
- java - java类Pattern中的位运算符逻辑
- haskell - Haskell 为什么使用 @ (as)
- java - 在 Spring Boot 中设置隔离级别
- python - 如何使用python生成仅重复一个元素的组合
- python - 如何将按钮添加到列表视图的每个项目
- c# - 使用通用基础测试类进行测试时正确使用内部类
- ruby-on-rails - Rails 5:grouped_collection_select
- python - 不明白 Python 中 LED 条形矩阵的等离子效应对二维阵列的 Sin 方程