我正试图在Swift中找到一种比较n个整数数组的快速方法。实际上我想比较一个结构,但同样的原则适用。我可以通过各种方式使用循环等来实现这一点,但由于数组很大,我需要以高刷新率执行此操作,我想知道是否有人有更好的想法?
let array1 = [0,255,128]
let array2 = [255,128,0]
let array3 = [128,0,0]
// result [255,255,128]
更准确的例子是找到最高'优先级',然后找到优先级匹配的最高'级别'
let array1 = [(level: 0, priority: 200),(level: 255, priority: 100), (level: 128, priority: 200)]
let array2 = [(level: 255, priority: 100),(level: 128, priority: 100), (level: 0, priority: 0)]
let array3 = [(level: 128, priority: 200),(level: 0, priority: 200), (level: 0, priority: 0)]
// result [128,0,128]
非常感谢
答案 0 :(得分:0)
如果需要比较数组的每个元素,则必须至少循环一次整个数组。我认为你能做的最好的事情就是通过创建一个带辅助函数的Struct来实现比较,以减少你需要的代码量。我最好的镜头看起来像这样:
compile
当然这个解决方案假设所有数组都具有相同的长度,并且您知道长度。如果不是这种情况,那么您可以使用其他一些方法来确定何时安全地停止循环。
答案 1 :(得分:0)
这是另一种解决方案:
typealias levelPriorityTuple = (level: Int, priority: Int)
func > (tuple1:levelPriorityTuple,tuple2:levelPriorityTuple) -> Bool {
return tuple1.priority == tuple2.priority ? tuple1.level > tuple2.level : tuple1.priority > tuple2.priority
}
let array1 : [levelPriorityTuple] = [(level: 0, priority: 200),(level: 255, priority: 100), (level: 128, priority: 200)]
let array2 : [levelPriorityTuple] = [(level: 255, priority: 100),(level: 128, priority: 100), (level: 0, priority: 0)]
let array3 : [levelPriorityTuple] = [(level: 128, priority: 200),(level: 0, priority: 200), (level: 0, priority: 0)]
var result = [Int]()
var arrays = [array1, array2, array3]
if !arrays.isEmpty {
var tempArray = arrays[0]
arrays.forEach{arr in result = Array(zip(tempArray, arr)).map{$0.0 > $0.1 ? $0.0 : $0.1}.map{$0.level}}
}
print(result)
//[128, 0, 128]
您只需验证每个阵列的大小是否相同,您可以根据需要添加任意数量的阵列