Удалить нечисловые символы из строки, имеющей несколько значений с плавающей запятой, используя цикл for - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть строка, содержащая символы и значения с плавающей точкой в ​​списке, например let string = "12.1gh34.5abc32.1".я хочу удалить символы из строки, и результат будет показан в массиве со значениями с плавающей запятой.Есть ли решение для этого.

Ответы [ 2 ]

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

Вы можете использовать метод Collection split и установить omittingEmptySubsequences на true:

extension StringProtocol {
    func notContains(_ element: Element) -> Bool {
        return !contains(element)
    }
    var numbers: [SubSequence] {
        return split(maxSplits: Int.max, omittingEmptySubsequences: true, whereSeparator: "0123456789.".notContains)
    }
}

let text = "12.1gh 34.5abc 32.5"
let result = text.numbers                // ["12.1", "34.5", "32.5"]
let nums = result.flatMap(Double.init)   // [12.1, 34.5, 32.5]
0 голосов
/ 18 сентября 2018

Разделить строку, используя буквы в качестве разделителя.Удалите пустые строки из результата.Сопоставьте оставшиеся строки чисел с действительными числами.

let string = "12.1gh34.5abc32.1"
let numbers = string.components(separatedBy: .letters)
                    .filter { !$0.isEmpty }
                    .compactMap { Double($0) }

Вывод:

[12.1, 34.5, 32.1]

Если вы хотитечтобы иметь дело с чем угодно, кроме десятичной цифры или запятой, вы можете заменить .letters на:

CharacterSet(charactersIn: "0123456789.").inverted
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...