检查数组是否包含Swift中另一个数组的所有元素

iOS极客

我想为数组编写一个扩展名,以检查一个数组是否包含另一个数组的所有元素,在我的用例中,它是字符串对象,但我一直得到:

Cannot convert value of type 'T.Generator.Element' to expected argument type '@noescape _ throws -> Bool'

在该行中self.contains(item)的错误item

这是我的代码:

extension Array {
    func containsArray<T : SequenceType where T.Generator.Element : Equatable> (array:T) -> Bool{
        for item:T.Generator.Element in array{
            if !self.contains(item) {
                return false
            }
        }
        return true
    }
}
马丁·R

您已要求sequence元素为Equatable,但它们与数组元素无关。所以

 if !self.contains(item) { ... }

不编译。

您可能想要的是要求sequence元素具有与array元素相同的类型(应该为Equatable):

extension Array where Element: Equatable {
    func containsArray<T : SequenceType where T.Generator.Element == Element> (array:T) -> Bool {
        for item in array {
            if !self.contains(item) {
                return false
            }
        }
        return true
    }
}

如果只需要用于数组参数的方法,而不需要用于一般序列的方法,则可以将声明简化为

extension Array where Element: Equatable {
    func containsArray(array: [Element]) -> Bool {
        for item in array {
            if !self.contains(item) {
                return false
            }
        }
        return true
    }
}

可以缩短为

extension Array where Element: Equatable {
    func containsArray(array: [Element]) -> Bool {
        return !array.contains { !self.contains($0) }
    }
}

就像@AMomchilov所说的那样,contains()进行线性搜索,所以这很O(M*N)复杂,其中MN是两个数组的长度。您可以针对元素为的情况定义特殊化Hashable,并针对进行成员资格检查Set

extension Array where Element: Hashable {
    func containsArray(array: [Element]) -> Bool {
        let selfSet = Set(self)
        return !array.contains { !selfSet.contains($0) }
    }
}

这是否比以前的方法快,将取决于数组的大小以及元素的类型(比较元素的“昂贵程度”)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

检查数组的所有元素是否包含在另一个数组中

来自分类Dev

检查一个数组的所有元素是否在另一个数组中

来自分类Dev

检查数组是否包含具有另一个数组的元素的元素

来自分类Dev

如何确定一个数组是否包含Swift中另一个数组的所有元素?

来自分类Dev

检查数组的元素是否包含在另一个数组的元素中

来自分类Dev

检查数组中的所有元素是否都存在于另一个数组中

来自分类Dev

检查一个数组中的所有值是否在另一个数组中

来自分类Dev

javascript检查另一个数组中是否包含1个数组的元素

来自分类Dev

检查一个数组中的所有元素是否都存在于另一个数组中

来自分类Dev

检查数组是否包含在PostgreSQL中的另一个数组中

来自分类Dev

检查数组-值是否包含在另一个数组中?

来自分类Dev

检查一个数组是否包含另一个数组

来自分类Dev

检查一个数组是否包含另一个数组的值

来自分类Dev

检查数组的元素是否存在于PHP的另一个数组中

来自分类Dev

如何检查一个数组是否包含PHP中的另一个数组?

来自分类Dev

检查对象内部的另一个数组中是否包含一个数组

来自分类Dev

检查一个数组是否包含在另一个数组中

来自分类Dev

检查一个数组是否包含在另一个数组中

来自分类Dev

检查一个数组项是否包含在另一个数组项中

来自分类Dev

python:检查一个numpy数组是否包含另一个数组的任何元素

来自分类Dev

如何根据另一个数组 swift 3 在数组中包含元素

来自分类Dev

测试一个数组的元素是否包含在另一个数组中

来自分类Dev

检查一个数组中的所有字符串是否在另一个数组中

来自分类Dev

用另一个数组的元素替换数组中的所有零

来自分类Dev

检查DataFrame名称是否包含另一个数组中的名称

来自分类Dev

检查是否可以在另一个数组中找到所有项目

来自分类Dev

检查字符串数组元素仅包含另一个数组中的元素

来自分类Dev

检查数组的所有项目是否在另一个关联数组中可用?

来自分类Dev

检查列表数组是否包含另一个列表中的元素

Related 相关文章

  1. 1

    检查数组的所有元素是否包含在另一个数组中

  2. 2

    检查一个数组的所有元素是否在另一个数组中

  3. 3

    检查数组是否包含具有另一个数组的元素的元素

  4. 4

    如何确定一个数组是否包含Swift中另一个数组的所有元素?

  5. 5

    检查数组的元素是否包含在另一个数组的元素中

  6. 6

    检查数组中的所有元素是否都存在于另一个数组中

  7. 7

    检查一个数组中的所有值是否在另一个数组中

  8. 8

    javascript检查另一个数组中是否包含1个数组的元素

  9. 9

    检查一个数组中的所有元素是否都存在于另一个数组中

  10. 10

    检查数组是否包含在PostgreSQL中的另一个数组中

  11. 11

    检查数组-值是否包含在另一个数组中?

  12. 12

    检查一个数组是否包含另一个数组

  13. 13

    检查一个数组是否包含另一个数组的值

  14. 14

    检查数组的元素是否存在于PHP的另一个数组中

  15. 15

    如何检查一个数组是否包含PHP中的另一个数组?

  16. 16

    检查对象内部的另一个数组中是否包含一个数组

  17. 17

    检查一个数组是否包含在另一个数组中

  18. 18

    检查一个数组是否包含在另一个数组中

  19. 19

    检查一个数组项是否包含在另一个数组项中

  20. 20

    python:检查一个numpy数组是否包含另一个数组的任何元素

  21. 21

    如何根据另一个数组 swift 3 在数组中包含元素

  22. 22

    测试一个数组的元素是否包含在另一个数组中

  23. 23

    检查一个数组中的所有字符串是否在另一个数组中

  24. 24

    用另一个数组的元素替换数组中的所有零

  25. 25

    检查DataFrame名称是否包含另一个数组中的名称

  26. 26

    检查是否可以在另一个数组中找到所有项目

  27. 27

    检查字符串数组元素仅包含另一个数组中的元素

  28. 28

    检查数组的所有项目是否在另一个关联数组中可用?

  29. 29

    检查列表数组是否包含另一个列表中的元素

热门标签

归档