You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.8 KiB
96 lines
2.8 KiB
//
|
|
// Array+Extensions.swift
|
|
// PadelClub
|
|
//
|
|
// Created by Razmig Sarkissian on 03/03/2024.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
extension Array {
|
|
func chunked(into size: Int) -> [[Element]] {
|
|
return stride(from: 0, to: count, by: size).map {
|
|
Array(self[$0 ..< Swift.min($0 + size, count)])
|
|
}
|
|
}
|
|
|
|
func anySatisfy(_ p: (Element) -> Bool) -> Bool {
|
|
return first(where: { p($0) }) != nil
|
|
//return !self.allSatisfy { !p($0) }
|
|
}
|
|
|
|
// Check if the number of elements in the sequence is even
|
|
var isEven: Bool {
|
|
return self.count % 2 == 0
|
|
}
|
|
|
|
// Check if the number of elements in the sequence is odd
|
|
var isOdd: Bool {
|
|
return self.count % 2 != 0
|
|
}
|
|
}
|
|
|
|
extension Array where Element: Equatable {
|
|
|
|
/// Remove first collection element that is equal to the given `object` or `element`:
|
|
mutating func remove(elements: [Element]) {
|
|
elements.forEach {
|
|
if let index = firstIndex(of: $0) {
|
|
remove(at: index)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
extension Array where Element: CustomStringConvertible {
|
|
func customJoined(separator: String, lastSeparator: String) -> String {
|
|
switch count {
|
|
case 0:
|
|
return ""
|
|
case 1:
|
|
return "\(self[0])"
|
|
case 2:
|
|
return "\(self[0]) \(lastSeparator) \(self[1])"
|
|
default:
|
|
let firstPart = dropLast().map { "\($0)" }.joined(separator: ", ")
|
|
let lastPart = "\(lastSeparator) \(last!)"
|
|
return "\(firstPart) \(lastPart)"
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
extension Dictionary where Key == Int, Value == [String] {
|
|
mutating func setOrAppend(_ element: String?, at key: Int) {
|
|
// Check if the element is nil; do nothing if it is
|
|
guard let element = element else {
|
|
return
|
|
}
|
|
|
|
// Check if the key exists in the dictionary
|
|
if var array = self[key] {
|
|
// If it exists, append the element to the array
|
|
array.append(element)
|
|
self[key] = array
|
|
} else {
|
|
// If it doesn't exist, create a new array with the element
|
|
self[key] = [element]
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
extension Array where Element == String {
|
|
func formatList(maxDisplay: Int = 2) -> [String] {
|
|
// Check if the array has fewer or equal elements than the maximum display limit
|
|
if self.count <= maxDisplay {
|
|
// Join all elements with commas
|
|
return self
|
|
} else {
|
|
// Join only the first `maxDisplay` elements and add "et plus"
|
|
let displayedItems = self.prefix(maxDisplay)
|
|
let remainingCount = self.count - maxDisplay
|
|
return displayedItems.dropLast() + [displayedItems.last! + " et \(remainingCount) de plus"]
|
|
}
|
|
}
|
|
}
|
|
|