How to determine if one array contains all elements of another array in Swift?

后端 未结 12 1113
梦如初夏
梦如初夏 2020-12-13 17:47

I have 2 arrays:

var list:Array = [1,2,3,4,5]
var findList:Array = [1,3,5]

I want to determine if list A

12条回答
  •  伪装坚强ぢ
    2020-12-13 18:01

    If you need to determine, that one array is subArray of another.

    public extension Array where Element: Equatable {
    
        func isSuperArray(of array: Array) -> Bool {
    
            guard
                count >= array.count,
                let indexes = array.first.flatMap(indexes(of:)),
                !indexes.isEmpty else {
                    return false
            }
    
            let arraysForComparison = indexes
                .compactMap { index -> [Element]? in
                    guard index + (array.count - 1) <= count else { return nil }
                    return Array(self[index..<(index + array.count)])
            }
    
            return arraysForComparison.contains(array)
        }
    
        func isSubArray(of array: Array) -> Bool {
            array.isSuperArray(of: self)
        }
    
        private func indexes(of element: Element) -> [Index] {
            enumerated()
                .filter { element == $0.1 }
                .map { index, _ in index }
        }
    }
    

    Example of usage:

    let array1 = [1, 2, 3, 4]
    let array2 = [2, 3]
    
    print(array1.isSuperArray(of: array2)) // true
    print(array2.isSubArray(of: array1)) // true
    
    print(array2.isSuperArray(of: array1)) // false
    print(array1.isSubArray(of: array2)) // false
    

提交回复
热议问题