Как бы вы преобразовали [0,3,2,1] в ["три", "три", "три", "два", "два", "один"] в Swift 5? - PullRequest
0 голосов
/ 30 июня 2019

Я пытаюсь решить проблему в приложении, которое я создаю.

Я дошел до фильтрации и удаления нуля, но я не могу понять, как продублировать значения массива в соответствии ск их значению Int внутри массива.

var array1: [Int] = [0,3,2,1]

let aboveZero = array1.filter{$0 >= 1}
print(aboveZero) // "[3, 2, 1]"

let words1 = aboveZero.map { NumberFormatter.localizedString(from: $0 as NSNumber, number: .spellOut) }
print(words1) // "["three", "two", "one"]"

Ожидается: "[" три "," три "," три "," два "," два "," один "]"

Ответы [ 2 ]

0 голосов
/ 30 июня 2019

Попробуйте это:

var array1: [Int] = [0,3,2,1]

let aboveZero = array1.filter{$0 >= 1}
print(aboveZero)

var array2: [Int] = []
aboveZero.forEach({ for _ in 0..<$0 { array2.append($0) } })
print(array2) // ["three", "three", "three", "two", "two", "one"]

let words1 = array2.map { NumberFormatter.localizedString(from: $0 as NSNumber, number: .spellOut) }
print(words1) // ["three", "three", "three", "two", "two", "one"]
0 голосов
/ 30 июня 2019

Используйте flatMap вместе с Array.init(repeating:,count:):

[0, 3, 2, 1].flatMap {
    repeatElement(
        NumberFormatter.localizedString(
            from: $0 as NSNumber,
            number: .spellOut
        ),
        count: $0
    )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...