Быстрый вынос
extension Array where Element == String {
func repeatItem(_ item: Element, times n: Int) -> Array<Element> {
return flatMap { $0 == item ? Array(repeating: $0, count: n) : [$0] }
}
}
Подробные пояснения
Использование flatMap
:
yourArray.flatMap { $0 == "v" ? [$0, $0] : [$0] }
По сути, это проверяет каждый элемент массива.Если это "v"
, включите его в ["v", "v"]
.Если это не "v"
, превратите его в массив с этим единственным элементом.Затем он выравнивает все эти массивы, поэтому flatMap
.
Вы также можете утроить определенный элемент:
yourArray.flatMap { $0 == "v" ? [$0, $0, $0] : [$0] }
Или повторить его n
раз:
yourArray.flatMap { $0 == "v" ? Array(repeating: $0, count: n) : [$0] }
Используйте игровую площадку, чтобы проверить это:
//: Playground - noun: a place where people can play
import Foundation
var inputArray = ["A","s","B","v","C","s","D","v","E","s"]
var expectArray2 = ["A","s","B","v","v","C","s","D","v","v","E","s"]
var expectArray3 = ["A","s","B","v","v","v","C","s","D","v","v","v","E","s"]
var expectArray4 = ["A","s","B","v","v","v","v","C","s","D","v","v","v","v","E","s"]
extension Array where Element == String {
func repeatItem(_ item: Element, times n: Int) -> Array<Element> {
return flatMap { $0 == item ? Array(repeating: $0, count: n) : [$0] }
}
}
print(inputArray.repeatItem("v", times: 2) == expectArray2)
print(inputArray.repeatItem("v", times: 3) == expectArray3)
print(inputArray.repeatItem("v", times: 4) == expectArray4)