Как я могу полностью использовать все строки внутри массива?

Я учусь быстро. Я пробовал это на 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. Строки внутри не капитализируются.

Ответ 1

Чтобы ответить на мой собственный вопрос. Подводя итог всему, что я нашел в ответах здесь. Я придумал это решение. Это то, что я сделал, чтобы исправить это с меньшим процессом.

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
    }

}

Ответ 2

update: 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}

A filter() sample:

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

Вы также можете использовать сортировку метода (или отсортированную, если вы не хотите мутировать исходный массив), чтобы сортировать результат по алфавиту, если необходимо:

let sortedNames = ["sean", "fido", "sarah", "parker", "walt", "abby", "yang"].map{$0.capitalized}.sorted()

sortedNames  // ["Abby", "Fido", "Parker", "Sarah", "Sean", "Walt", "Yang"]

Ответ 3

Попробуйте использовать следующий код:

var dogNames = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"]

for index in 0..<dogNames.count {
    var dogName = dogNames[index].capitalizedString
    dogNames[index]=dogName
}

Выход:

[Шон, Фидо, Сара, Паркер, Уолт, Эбби, Ян]

Ответ 4

Удалив из середины массива, а затем добавляя его в конец, вы пропускаете некоторые элементы. Вот как выглядит массив на каждом шаге:

[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
    })

Ответ 5

Используйте .uppercaseString для использования всех символов.

Ответ 6

Вы должны выполнить цикл в обратном порядке:

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

Причина в том, что когда вы удаляете элемент из массива, все элементы после удаленной единицы смещаются назад на одну позицию, следовательно, их индекс изменяется, тогда как все элементы до этого не имеют никакого изменения индекса. Путем навигации в обратном порядке вы уверены, что элементы, которые все еще обрабатываются, не изменили свой индекс.

Ответ 7

Вот самый простой способ сделать это в swift 3.0:

var dogNames = ["Sean", "fido", "Sarah", "Parker", "Walt", "abby", "Yang"]

dogNames = dogNames.map {$0.capitalized}
print("dogNames: \(dogNames)")