我怎样才能直接在数组中的所有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)")