Comment est-ce que je peux capitaliser toutes les strings à l'intérieur d'un tableau directement?

J'apprends vite. J'ai essayé cela dans Playground. Je n'ai aucune idée pourquoi la string n'est pas en majuscule ici. Ou existe-t-il un autre moyen de mettre directement la string à l'intérieur du tableau?

Voici mon code.

var dogNames = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"] for index in 0..<dogNames.count { var dogName = dogNames[index].capitalizedSsortingng dogNames.removeAtIndex(index) dogNames.append(dogName) } 

Lorsque j'essaie d'afficher à nouveau la variable dogNames. Les strings à l'intérieur ne sont pas en majuscules.

mise à jour: 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" 

C'est un cas typique pour utiliser map() :

 let dogNames1 = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"].map{$0.capitalized} 

Un filter() échantillon:

 let dogNamesStartingWithS = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"].filter{$0.hasPrefix("S")} dogNamesStartingWithS // ["Sean", "Sarah"] 

vous pouvez combiner les deux:

 let namesStartingWithS = ["sean", "fido", "sarah", "parker", "walt", "abby", "yang"].map{$0.capitalized}.filter{$0.hasPrefix("S")} namesStartingWithS // ["Sean", "Sarah"] 

Vous pouvez également utiliser le sorting de méthode (ou sortingé si vous ne voulez pas muter le tableau original) pour sortinger le résultat par ordre alphabétique si nécessaire:

 let sortedNames = ["sean", "fido", "sarah", "parker", "walt", "abby", "yang"].map{$0.capitalized}.sorted() sortedNames // ["Abby", "Fido", "Parker", "Sarah", "Sean", "Walt", "Yang"] 

Essayez d'utiliser le code suivant:

 var dogNames = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"] for index in 0..<dogNames.count { var dogName = dogNames[index].capitalizedSsortingng dogNames[index]=dogName } 

Sortie:

[Sean, Fido, Sarah, Parker, Walt, Abby, Yang]

En supprimant le milieu du tableau et en l'ajoutant à la fin, vous finissez par sauter certains éléments. Voici à quoi ressemble le tableau à chaque étape:

 [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] 

Si vous voulez conserver le tableau intact, il serait plus logique de le replace par le même index que vous l'avez pris:

 dogNames[index] = dogName 

Mais vous pouvez le faire plus élégamment en utilisant Array.map pour traiter chaque élément indépendamment, et ne pas avoir à traiter avec les index du tout:

  let dogNames = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"] let capitalDogNames = dogNames.map({ (dogName) -> Ssortingng in return dogName.capitalizedSsortingng }) 

Pour répondre à ma propre question aussi. Résumant tout ce que j'ai trouvé dans les réponses ici. Je suis venu avec cette solution. C'est ce que j'ai fait pour réparer cela avec less de process.

 var dogNames = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"] for index in 0..<dogNames.count { if dogNames[index] != dogNames[index].capitalizedSsortingng { var dogName = dogNames[index].capitalizedSsortingng dogNames[index] = dogName } } 

Vous devez effectuer la boucle dans l'ordre inverse:

 for index in reverse(0..<dogNames.count) 

La raison en est que lorsque vous supprimez un élément d'un tableau, tous les éléments après celui qui a été supprimé sont décalés d'une position, leur index est donc modifié – alors que tous les éléments avant n'ont aucun changement d'index. En naviguant dans l'ordre inverse, vous êtes sûr que les éléments à traiter n'ont pas été modifiés.

Utilisez .uppercaseSsortingng pour mettre en majuscule tous les caractères.

Voici la manière la plus simple de le faire dans swift 3.0 :

 var dogNames = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"] dogNames = dogNames.map {$0.capitalized} print("dogNames: \(dogNames)")