如何直接将数组中的所有字符串大写?
How can I capitalize all the strings inside an array directly?
我正在学习 swift。我一直在 Playground 尝试这个。我不知道为什么字符串在这里没有大写。或者有没有其他方法可以直接将数组中的字符串大写?
这是我的代码。
var dogNames = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"]
for index in 0..<dogNames.count {
var dogName = dogNames[index].capitalizedString
dogNames.removeAtIndex(index)
dogNames.append(dogName)
}
当我尝试再次显示变量 dogNames 时。里面的字符串没有大写
通过从数组中间删除然后追加到末尾,您最终会跳过一些项目。这是数组在每个步骤中的样子:
[Sean, fido, Sarah, Parker, Walt, abby, Yang]
[fido, Sarah, Parker, Walt, abby, Yang, Sean] (index=0; Sean moved to end)
[fido, Parker, Walt, abby, Yang, Sean, Sarah] (index=1; Sarah moved to end)
[fido, Parker, abby, Yang, Sean, Sarah, Walt] (index=2; Walt moved to end)
[fido, Parker, abby, Sean, Sarah, Walt, Yang]
[fido, Parker, abby, Sean, Walt, Yang, Sarah]
[fido, Parker, abby, Sean, Walt, Sarah, Yang]
[fido, Parker, abby, Sean, Walt, Sarah, Yang]
如果您想保持数组完好无损,在您从中获取它的同一索引处进行替换会更有意义:
dogNames[index] = dogName
但是您可以更优雅地使用 Array.map 独立处理每个项目,而根本不必处理索引:
let dogNames = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"]
let capitalDogNames = dogNames.map({ (dogName) -> String in
return dogName.capitalizedString
})
使用 .uppercaseString
将所有字符大写。
尝试使用以下代码:
var dogNames = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"]
for index in 0..<dogNames.count {
var dogName = dogNames[index].capitalizedString
dogNames[index]=dogName
}
输出:
[Sean, Fido, Sarah, Parker, Walt, Abby, Yang]
您必须以相反的顺序执行循环:
for index in reverse(0..<dogNames.count)
原因是,当您从数组中删除一个元素时,删除元素之后的所有元素都会向后移动一个位置,因此它们的索引会发生变化 - 而之前的所有元素都没有任何索引变化。通过以相反的顺序导航,您可以确定仍要处理的项目没有更改其索引。
也回答我自己的问题。总结我在此处的答案中找到的所有内容。我想出了这个解决方案。这就是我用更少的过程解决这个问题的方法。
var dogNames = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"]
for index in 0..<dogNames.count {
if dogNames[index] != dogNames[index].capitalizedString {
var dogName = dogNames[index].capitalizedString
dogNames[index] = dogName
}
}
更新:Xcode 8.2.1 • Swift 3.0.2
var dogNames = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"]
for (index, element) in dogNames.enumerated() {
dogNames[index] = element.capitalized
}
print(dogNames) // "["Sean", "Fido", "Sarah", "Parker", "Walt", "Abby", "Yang"]\n"
这是使用map()
的典型案例:
let dogNames1 = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"].map{[=11=].capitalized}
一个filter()
样本:
let dogNamesStartingWithS = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"].filter{[=12=].hasPrefix("S")}
dogNamesStartingWithS // ["Sean", "Sarah"]
您可以将两者结合使用:
let namesStartingWithS = ["sean", "fido", "sarah", "parker", "walt", "abby", "yang"].map{[=13=].capitalized}.filter{[=13=].hasPrefix("S")}
namesStartingWithS // ["Sean", "Sarah"]
如果需要,您还可以使用 sort 方法(如果您不想改变原始数组,则可以使用 sorted 方法)按字母顺序对结果进行排序:
let sortedNames = ["sean", "fido", "sarah", "parker", "walt", "abby", "yang"].map{[=14=].capitalized}.sorted()
sortedNames // ["Abby", "Fido", "Parker", "Sarah", "Sean", "Walt", "Yang"]
这是 swift 3.0 中最简单的方法:
var dogNames = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"]
dogNames = dogNames.map {[=10=].capitalized}
print("dogNames: \(dogNames)")
我正在学习 swift。我一直在 Playground 尝试这个。我不知道为什么字符串在这里没有大写。或者有没有其他方法可以直接将数组中的字符串大写?
这是我的代码。
var dogNames = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"]
for index in 0..<dogNames.count {
var dogName = dogNames[index].capitalizedString
dogNames.removeAtIndex(index)
dogNames.append(dogName)
}
当我尝试再次显示变量 dogNames 时。里面的字符串没有大写
通过从数组中间删除然后追加到末尾,您最终会跳过一些项目。这是数组在每个步骤中的样子:
[Sean, fido, Sarah, Parker, Walt, abby, Yang]
[fido, Sarah, Parker, Walt, abby, Yang, Sean] (index=0; Sean moved to end)
[fido, Parker, Walt, abby, Yang, Sean, Sarah] (index=1; Sarah moved to end)
[fido, Parker, abby, Yang, Sean, Sarah, Walt] (index=2; Walt moved to end)
[fido, Parker, abby, Sean, Sarah, Walt, Yang]
[fido, Parker, abby, Sean, Walt, Yang, Sarah]
[fido, Parker, abby, Sean, Walt, Sarah, Yang]
[fido, Parker, abby, Sean, Walt, Sarah, Yang]
如果您想保持数组完好无损,在您从中获取它的同一索引处进行替换会更有意义:
dogNames[index] = dogName
但是您可以更优雅地使用 Array.map 独立处理每个项目,而根本不必处理索引:
let dogNames = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"]
let capitalDogNames = dogNames.map({ (dogName) -> String in
return dogName.capitalizedString
})
使用 .uppercaseString
将所有字符大写。
尝试使用以下代码:
var dogNames = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"]
for index in 0..<dogNames.count {
var dogName = dogNames[index].capitalizedString
dogNames[index]=dogName
}
输出:
[Sean, Fido, Sarah, Parker, Walt, Abby, Yang]
您必须以相反的顺序执行循环:
for index in reverse(0..<dogNames.count)
原因是,当您从数组中删除一个元素时,删除元素之后的所有元素都会向后移动一个位置,因此它们的索引会发生变化 - 而之前的所有元素都没有任何索引变化。通过以相反的顺序导航,您可以确定仍要处理的项目没有更改其索引。
也回答我自己的问题。总结我在此处的答案中找到的所有内容。我想出了这个解决方案。这就是我用更少的过程解决这个问题的方法。
var dogNames = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"]
for index in 0..<dogNames.count {
if dogNames[index] != dogNames[index].capitalizedString {
var dogName = dogNames[index].capitalizedString
dogNames[index] = dogName
}
}
更新:Xcode 8.2.1 • Swift 3.0.2
var dogNames = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"]
for (index, element) in dogNames.enumerated() {
dogNames[index] = element.capitalized
}
print(dogNames) // "["Sean", "Fido", "Sarah", "Parker", "Walt", "Abby", "Yang"]\n"
这是使用map()
的典型案例:
let dogNames1 = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"].map{[=11=].capitalized}
一个filter()
样本:
let dogNamesStartingWithS = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"].filter{[=12=].hasPrefix("S")}
dogNamesStartingWithS // ["Sean", "Sarah"]
您可以将两者结合使用:
let namesStartingWithS = ["sean", "fido", "sarah", "parker", "walt", "abby", "yang"].map{[=13=].capitalized}.filter{[=13=].hasPrefix("S")}
namesStartingWithS // ["Sean", "Sarah"]
如果需要,您还可以使用 sort 方法(如果您不想改变原始数组,则可以使用 sorted 方法)按字母顺序对结果进行排序:
let sortedNames = ["sean", "fido", "sarah", "parker", "walt", "abby", "yang"].map{[=14=].capitalized}.sorted()
sortedNames // ["Abby", "Fido", "Parker", "Sarah", "Sean", "Walt", "Yang"]
这是 swift 3.0 中最简单的方法:
var dogNames = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"]
dogNames = dogNames.map {[=10=].capitalized}
print("dogNames: \(dogNames)")