检查所有数组元素是否匹配值

Checking that all Array elements match value

我发现 是另一个问题的答案。用于判断一个数组的所有元素是否匹配。

extension Array where Element : Equatable {
    func allEqual() -> Bool {
        if let firstElem = first {
            return !dropFirst().contains { [=10=] != firstElem }
        }
        return true
    }
}

我试着重构它,让它成为一个 Set 而不是 Array,并且可以传入一个值,这样你就可以检查 Set 的每个元素是否与传入的值匹配。但是我没有快速的地方。我想是因为我也试图使价值成为通用的。非常感谢任何帮助!

集合不像数组。一方面,Set 是无序的,而 Array 是有序的。更重要的是,根据定义,所有 Set 元素都具有 彼此不同的值 。因此它们不能都匹配相同的值。 (当然,除了 Set 只有一个元素的简单退化情况!)

所以在意识到 Sets 应该只有唯一值,而我应该改用 Array 之后,我修改了上面的内容以接受一个值:

func allEqual(value: Element) -> Bool {
    if let first = first {
        if contains(value) {
            return !dropFirst().contains { [=10=] != first }
        }
        return false
    }
    return false
}

检查数组的所有元素是否都等于给定值 可以用

稍微缩短
extension Array where Element : Equatable {

    func allEqualTo(value: Element) -> Bool {
        return !contains { [=10=] != value }
    }

}