更新数组中的元素
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" } }
我们如何更新数组的元素
方法一:-工作代码:-
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" } }