В Swift вы можете использовать расширения для добавления новых функций к существующим типам, включая массивы. Вот несколько методов, которые вы можете добавить, чтобы расширить функциональность массивов в Swift:
-
среднее: вычисляет среднее значение всех элементов массива.extension Array where Element: Numeric { func average() -> Element? { guard !isEmpty else { return nil } let sum = reduce(0, +) return sum / Element(count) } } let numbers = [1, 2, 3, 4, 5] let avg = numbers.average() // 3 -
startsWith: проверяет, начинается ли массив с заданного префикса.extension Array where Element: Equatable { func startsWith(_ prefix: [Element]) -> Bool { prefix.count <= count && prefix.elementsEqual(self[..<prefix.endIndex]) } } let array = [1, 2, 3, 4, 5] let startsWithPrefix = array.startsWith([1, 2]) // true -
дубликаты: находит все элементы, которые встречаются в массиве более одного раза.extension Array where Element: Hashable { func duplicates() -> [Element] { let counts = reduce(into: [:]) { counts, element in counts[element, default: 0] += 1 } return Array(counts.filter { $0.value > 1 }.keys) } } let numbers = [1, 2, 2, 3, 4, 4, 5] let duplicates = numbers.duplicates() // [2, 4] -
shuffle: возвращает новый массив с элементами, перемешанными случайным образом.extension Array { func shuffled() -> [Element] { var array = self for i in array.indices.dropLast() { let j = Int.random(in: i..<array.count) if i != j { array.swapAt(i, j) } } return array } } let numbers = [1, 2, 3, 4, 5] let shuffledNumbers = numbers.shuffled() // [4, 2, 1, 5, 3] -
removeAll: удаляет все вхождения данного элемента из массива.extension Array where Element: Equatable { mutating func removeAll(_ element: Element) { removeAll { $0 == element } } } var numbers = [1, 2, 2, 3, 4, 4, 5] numbers.removeAll(2) print(numbers) // [1, 3, 4, 4, 5]