我有两个数组。如何更改数组中的不同值?

I have two array. How Can I change different value in Array?

我只将带有 isSelected = true 的项目发送到 favCountriescountries 中有来自该服务的所有国家/地区。 我想将来自服务的 countriesfavCountries 进行比较,并在具有相同 code 且值为 isSelected = true 的国家/地区数组中创建 isSelected = true最喜欢的国家。

如果favCountries数组中的代码和countries数组中的code匹配,我想使countries数组中的item值isSelected = true

我正在使用这个模型。

public struct CountryData: Codable {
  public let code: String?
  public let currencyCodes: [String]?
  public let name: String?
  public let wikiDataID: String?
  public var isSelected: Bool = false
}

var favCountries: [CountryData]
var countries: [CountryData]

不确定你是不是又问了这个问题。但是如果我理解正确的话,让你的 CountryData 符合 Equatable,迭代你的国家索引,如果 favCountries 包含当前元素,将国家 isSelected 属性 更改为 true:


extension CountryData: Equatable {
    public static func ==(lhs: Self, rhs: Self) -> Bool {
        lhs.name == rhs.name // match the appropriate properties
    }
}

countries.indices.forEach { index in
    if favCountries.contains(countries[index]) {
        countries[index].isSelected = true
    }
}

如果我没看错问题,

  1. 您想遍历 var favCountries: [CountryData]var countries: [CountryData].code

  2. 如果在你的循环中你的条件 favCountries[[=13=]] == countries[[=14=]].code 为真,那么你想将 $0.isSelected 设置为真。

我的伪代码方法:

您可以遍历一个数组并检查每个对象代码是否存在于另一个数组中,然后如果存在,则将您的 isSelected 值设置为 true。

假设两个 [CountryData] 数组都是偶数,您可以尝试这样的操作:

FOR EACH country in CountryData {
  if let hasMatch = countries.contains({where: country.code == [=10=].code}) {
    country.isSelected = true
   
}

祝你好运。

如果有帮助请告诉我!