我怎样才能直接在数组中的所有string大写?
我正在快速学习。 我一直在操场上玩这个游戏。 我不知道为什么string不在这里大写。 或者有什么其他的方式来直接在数组中的string大写?
这是我的代码。
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) }
当我尝试再次显示variablesdogNames。 里面的string没有被大写。
更新: 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{$0.capitalized}
filter()
示例:
let dogNamesStartingWithS = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"].filter{$0.hasPrefix("S")} dogNamesStartingWithS // ["Sean", "Sarah"]
你可以结合两个:
let namesStartingWithS = ["sean", "fido", "sarah", "parker", "walt", "abby", "yang"].map{$0.capitalized}.filter{$0.hasPrefix("S")} namesStartingWithS // ["Sean", "Sarah"]
如果需要,也可以使用sorting方法(或者如果不想改变原始数组,则按sorting对结果按字母顺序sorting):
let sortedNames = ["sean", "fido", "sarah", "parker", "walt", "abby", "yang"].map{$0.capitalized}.sorted() sortedNames // ["Abby", "Fido", "Parker", "Sarah", "Sean", "Walt", "Yang"]
尝试使用以下代码:
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] [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 })
也回答我自己的问题。 总结我在答案中find的一切。 我想出了这个解决scheme。 这是我所做的以较less的过程来解决这个问题。
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 } }
你必须以相反的顺序执行循环:
for index in reverse(0..<dogNames.count)
原因是当你从一个数组中删除一个元素时,被删除元素之后的所有元素都被移回一个位置,因此索引被改变 – 而之前的所有元素没有任何索引改变。 通过以相反的顺序导航,您确定仍然处理的项目没有改变其索引。
使用.uppercaseString
大写所有字符。
这是在swift 3.0中最简单的方法:
var dogNames = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"] dogNames = dogNames.map {$0.capitalized} print("dogNames: \(dogNames)")