Как использовать заглавные буквы в строке / массиве в Swift? - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь использовать каждый четный заполнитель в строке в Swift.Таким образом, символы в [0], [2], [4], [6] все получают в верхнем регистре.

У меня есть объявленная переменная:

var str = "This is a test" 

У меня есть массив, который взрываетсяпеременная в массив:

let characters = Array(str) //Creates the array "["T", "h", "i", "s", " ", "i", "s", " ", "a", " ", "t", "e", "s", "t"]\n"

Кроме того, я создаю пустой массив для ввода недавно заглавных / строчных букв

var newCharacters = Array<Character>()

, а затем объявляю индекс в 0

var index = 0 //declaring the index at 0

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

Я создал цикл for, который будет манипулировать чётными местозаполнителями в массиве, я просто не знаю синтаксис, чтобы использовать заглавные буквы в каждой строке:

for letter in characters {

   if index % 2 == 0 {

     }

}

Япытаясь выяснить: каков синтаксис, чтобы использовать заглавные буквы (четные числа в массиве), поместить их в новый массив и затем преобразовать обратно в строку.

Конечный результат должен быть:

"ThIs iS TeSt"

Ответы [ 4 ]

0 голосов
/ 25 сентября 2018

попробуйте этот код

var str = "This is a test"
var result = [String]()
for (index,element) in str.enumerated() {
    var val:String =  String(element).lowercased()
    if index % 2 == 0 {
        val = String(element).uppercased()
    }
    result.append(val)
}

print(result.joined())

результат

Это - TeSt

0 голосов
/ 25 сентября 2018

Вы можете комбинировать enumerated, map и joined в последовательности для создания результата:

let str = "This is a test"

let result = str.enumerated()
                .map { $0.offset % 2 == 0 ? String($0.element).uppercased() : String($0.element) }
                .joined()

print(result)
ThIs iS A TeSt

Пояснение:

  1. A String можно перечислить, как если бы это был массив Character.Вызов .enumerated() для String заставляет его генерировать последовательность из (offset: Int, element: Character) кортежей.
  2. map берет последовательность и создает массив.Закрытие, следующее за map, вызывается для каждого элемента последовательности по очереди, и значение, которое возвращает закрытие, становится следующим элементом в новом массиве.
  3. $0 - это имя по умолчанию для значения, передаваемого вкарта.В этом случае мы передаем кортеж (offset: Int, element: Character).$0.offset - это позиция символа в String, а $0.element - это символ.
  4. Здесь используется троичный оператор для возврата uppercased() String, созданного из Character, если смещение четное или String, если смещение нечетное.
  5. Результат map равен [String], а затем joined() используется для присоединения к массиву String обратно в один String.
0 голосов
/ 25 сентября 2018
let str = "This is a test"
let result = str.indices.map {
                 str.distance(from: str.startIndex, to: $0) % 2 == 0 ?
                 str[$0...$0].uppercased() :
                 str[$0...$0].lowercased() }.joined()
print(result)   // "ThIs iS A TeSt\n"

или как метод мутации в StringProtocol:

extension StringProtocol where Self: RangeReplaceableCollection {
    mutating func capitalizeEveryOther() {
        indices.forEach {
            replaceSubrange($0...$0, with:
                distance(from: startIndex, to: $0) % 2 == 0 ?
                self[$0...$0].uppercased() :
                self[$0...$0].lowercased() )
        }
    }
    var capitalizingEveryOther: Self {
        var result = self
        result.capitalizeEveryOther()
        return result
    }
}

var str5 = "This is a test"

str5.capitalizeEveryOther()

print(str5)     // ThIs iS A TeSt
0 голосов
/ 25 сентября 2018

Одним из способов является использование stride:

var str = "This is a test" 
var chars = Array(str).map { String($0) }
for i in stride(from: 0, to: chars.count, by: 2) {
  chars[i] = chars[i].uppercased()
}
var hiphopcasedStr = chars.joined()

Обратите внимание, что в то время, как вы находитесь в земле Юникода, некоторые символы пишутся заглавными буквами в строки из нескольких символов, поэтому массив Character не совсем подходит (таким образом,преобразование в массив String).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...