Swift 中是否有一个函数可以检查数组的所有元素是否具有相同的值?在我的例子中,它是 Int
类型的数组。我知道我可以使用一个简单的 for 循环对其进行迭代我只是想知道是否有内置的更快的东西。
最佳答案
在 Swift 5 中,您可以使用以下四种方法之一来测试数组的所有元素是否相等。
#1。使用 Array
的 allSatisfy(_:)
方法
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。使用 Array
的 reduce(_:_:)
方法
作为 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。使用 Set
的 init(_:)
初始化器
如果一个数组的所有元素都相等,从这个数组创建一个集合应该导致该集合只有一个元素:
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/