Лучший способ для замены подстрок из одного массива на значения из другого массива?

Есть строка (S1) вида: "Сб: 16: 00-18: 00, Пн: 13:00, Сб-Вс: 16:00"

и есть два массива подстрок:

(A1) - ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"] и (А2) - ["-1-", "-2-", "-3-", "-4-", "-5-", "-6-", "-7 -"]

Нужно в строке (S1) заменить (A2)

Т.е в пример выше должно получиться: «-6-: 16: 00-18: 00, -1-: 13: 00, -6 --- 7-: 16:00 «

Какой лучший (эффективное выполнение и короткая запись) способ на Swift для подобного преобразования?

Первое, что приходит в голову :

let a1 = ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"]
let a2 = ["-1-", "-2-", "-3-", "-4-", "-5-", "-6-", "-7-"]

var s = "Сб: 16:00-18:00, Пн: 13:00, Сб-Вс: 16:00"

for i in 0..<a1.count {
    s = s.replacingOccurrences(of: a1[i], with: a2[i])
}

print(s) // -6-: 16:00-18:00, -1-: 13:00, -6---7-: 16:00

но, возможно, есть более удачный вариант. И может даже он будет регистронезависимым.

1
задан xhr 31 May 2018 в 07:46
поделиться

1 ответ

У Вас самое простое решение. Для регистронезависимого варианта использовать caseInsensitive:

var someString = "сб: 16:00-18:00, ПН: 13:00, Сб-Вс: 16:00"

let whatToReplace = ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"]
let onWhichToReplace = ["-1-", "-2-", "-3-", "-4-", "-5-", "-6-", "-7-"]

assert(whatToReplace.count == onWhichToReplace.count)
for i in whatToReplace.indices {
    someString = someString.replacingOccurrences(of: whatToReplace[i], with: onWhichToReplace[i], options: .caseInsensitive)
}
print(someString)
2
ответ дан VAndrJ 6 June 2018 в 08:58
поделиться
  • 1
    спасибо за "опции: .caseInsensitive " ) – xhr 31 May 2018 в 09:16
  • 2
    я думал, может есть какой-то метод, который использует массивы для поиска / замены в качестве параметров (типа как в php php.net/manual/ru/function.str-ireplace.php ), но я его не увидел в документации ... – xhr 31 May 2018 в 14:00

Другие вопросы по тегам:

Похожие вопросы: