arrays - 检查数组的所有元素是否在 Swift 中具有相同的值

标签 arrays swift

Swift 中是否有一个函数可以检查数组的所有元素是否具有相同的值?在我的例子中,它是 Int 类型的数组。我知道我可以使用一个简单的 for 循环对其进行迭代我只是想知道是否有内置的更快的东西。

最佳答案

在 Swift 5 中,您可以使用以下四种方法之一来测试数组的所有元素是否相等。


#1。使用 ArrayallSatisfy(_:)方法

allSatisfy(_:) 返回一个 bool 值,指示序列的每个元素是否满足给定的谓词。您可以设置谓词来测试数组的所有元素是否相等:

let array = [1, 1, 1]

let hasAllItemsEqual = array.dropFirst().allSatisfy({ $0 == array.first })
print(hasAllItemsEqual) // prints: true
let array = [1, 1, 3]

let hasAllItemsEqual = array.dropFirst().allSatisfy({ $0 == array.first })
print(hasAllItemsEqual) // prints: false
let array = [Int]()

let hasAllItemsEqual = array.dropFirst().allSatisfy({ $0 == array.first })
print(hasAllItemsEqual) // prints: true

#2。使用 Arrayreduce(_:_:)方法

作为 allSatisfy(_:) 的替代方法,您可以使用 reduce(_:_:):

let array = [1, 1, 1]

let hasAllItemsEqual = array.dropFirst().reduce(true) { (partialResult, element) in
    return partialResult && element == array.first
}
print(hasAllItemsEqual) // prints: true
let array = [1, 1, 3]

let hasAllItemsEqual = array.dropFirst().reduce(true) { (partialResult, element) in
    return partialResult && element == array.first
}
print(hasAllItemsEqual) // prints: false
let array = [Int]()

let hasAllItemsEqual = array.dropFirst().reduce(true) { (partialResult, element) in
    return partialResult && element == array.first
}
print(hasAllItemsEqual) // prints: true

#3。使用 elementsEqual(_:)方法

elementsEqual(_:) 返回一个 bool 值,指示两个序列是否包含相同顺序的相同元素。因此,您可以通过重复初始数组的第一个元素来创建一个新集合,并将前者与后者进行比较:

let array = [1, 1, 1]

precondition(!array.isEmpty)
let repeated = repeatElement(array[0], count: array.count)

let hasAllItemsEqual = array.elementsEqual(repeated)
print(hasAllItemsEqual) // prints: true
let array = [1, 1, 3]

precondition(!array.isEmpty)
let repeated = repeatElement(array[0], count: array.count)

let hasAllItemsEqual = array.elementsEqual(repeated)
print(hasAllItemsEqual) // prints: false

#4。使用 Setinit(_:)初始化器

如果一个数组的所有元素都相等,从这个数组创建一个集合应该导致该集合只有一个元素:

let array = [1, 1, 1]

let set = Set(array)
let hasAllItemsEqual = set.count <= 1
print(hasAllItemsEqual) // prints: true
let array = [1, 1, 3]

let set = Set(array)
let hasAllItemsEqual = set.count <= 1
print(hasAllItemsEqual) // prints: false
let array = [Int]()

let set = Set(array)
let hasAllItemsEqual = set.count <= 1
print(hasAllItemsEqual) // prints: true

关于arrays - 检查数组的所有元素是否在 Swift 中具有相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29588158/

相关文章:

c - C 中两个数组元素地址之间的偏移量

swift:安全访问 SCNNode 数组的字典

ios - 快速设置状态栏的自定义颜色?

ios - 动画约束快速适合所有屏幕

javascript - 如何拆分具有多个符号的字符串

c++ - 此代码显示错误 "stu undeclared"??我应该怎么办

javascript - HTTP请求删除记录,然后从数组中删除obj Vue.js

python - 将 a[i+j] 数组映射到 A[i,j] 矩阵

ios - 为类型化数组创建快速数组扩展

ios - 为什么 firebase 函数只获取一次?