更新数组中的元素

Update element in array

我们如何更新数组的元素

方法一:-工作代码:-

var numberWords = ["one", "two", "three"]
   for i in 0..<numberWords.count {
       if numberWords[i] == "two" {
           numberWords[i] = "2"
       }
   }

但我正在寻找使用 Swift 高阶函数

的解决方案

方法二:

numberWords = numberWords.filter  {
       if [=11=] == "one" {
           [=11=] = "1"//cannot assign value [=11=] is immutable
       }
       return true
    }

Error thrown : Cannot assign value [=12=] is immutable

是否可行或方法 1 是唯一的方法?

不要用filter(),没有意义。
过滤器的要点是迭代每个元素并根据您的需要告诉您是否保留它(return true)或不保留它(return false)。

而是使用 map():

numberWords = numberWords.map({ return [=10=] == "one" ? "1" : [=10=] })

我使用了一个三元 if 并显式地写了一个 "return"(这不是必需的,因为它已经完成 "internally"(你需要 return 一些东西)),但是你可以更明确地保留您以前的代码:

numberWords = numberWords.map({
    if [=11=] == "one" {
        return "1"
    }
    return [=11=] })

map() 更适合这种情况。如果你想迭代每个项目并在需要时修改它,你可以使用它,这就是你想要做的。

就像有点变化一样,您可以编写一个就地映射,这对于大型阵列可能更有效(另请参见 reduce(into:))。

extension Array 
{
    mutating func mapInPlace(transform: (inout Element) -> Void)
    {
        for i in 0 ..< self.count
        {
            transform(&self[i])
        }
    }
}

var a = ["one", "two", "three"]
a.mapInPlace{ if [=10=] == "two" { [=10=] = "2" } }