【问题标题】:Update element in array更新数组中的元素
【发布时间】:2018-03-27 09:13:16
【问题描述】:

我们如何更新数组的元素

方法一:-工作代码:-

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

但我正在寻找使用 Swift 高阶函数的解决方案

方法二:

numberWords = numberWords.filter  {
       if $0 == "one" {
           $0 = "1"//cannot assign value $0 is immutable
       }
       return true
    }

抛出错误:无法赋值 $0 是不可变的

有可能还是方法1是唯一的方法?

【问题讨论】:

  • 不要使用filter(),它没有意义。改用map()numberWords = numberWords.map({ return $0 == "two" ? "2" : $0 })
  • 正如@Larme 提到的,你应该map 数组 filter 它。使用filter 的目的是确定(验证)集合中应该存在哪个元素,这可能导致集合中元素的数量减少; map 只是元素的转换,这可能是您的目标...

标签: swift higher-order-functions


【解决方案1】:

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

改为使用map():

numberWords = numberWords.map({ return $0 == "one" ? "1" : $0 })

我使用了三元 if 并显式编写了“return”(这不是必需的,因为它已经在“内部”完成(您需要返回一些东西)),但您可以更明确地保留之前的代码:

numberWords = numberWords.map({
    if $0 == "one" {
        return "1"
    }
    return $0 })

map() 更适合这种情况。如果您想迭代每个项目并根据需要进行修改,您可以使用它。

【讨论】:

  • 是的,完全没问题。我们如何更改 score.activeDate 。在self.monthlyActiveDayzModel.data?.responseMap?.resultsList?.scores = self.monthlyActiveDayzModel.data?.responseMap?.resultsList?.scores?.map { score in score.activeDate = "newValue" } 中,monthlyActiveDayzModel 是结构模型。
【解决方案2】:

只是有点多样化,您可以编写一个就地映射,这对于大型数组可能会更有效(另请参阅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 $0 == "two" { $0 = "2" } }

【讨论】:

  • 太棒了!!。我们如何更改 score.activeDate 。在self.monthlyActiveDayzModel.data?.responseMap?.resultsList?.scores = self.monthlyActiveDayzModel.data?.responseMap?.resultsList?.scores?.map { score in score.activeDate = "newValue" }monthlyActiveDayzModel 是结构模型。
  • @Ramesh 这是一个不同的问题。我会问一个关于这个的新问题。
猜你喜欢
  • 2014-08-15
  • 1970-01-01
  • 2020-04-18
  • 2014-12-03
  • 2013-09-07
  • 2021-01-07
  • 2020-07-27
  • 2019-12-25
  • 1970-01-01
相关资源
最近更新 更多