在Swift中比较n个整数数组的最快方法

时间:2018-01-29 17:37:47

标签: arrays swift compare

我正试图在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]

非常感谢

2 个答案:

答案 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]

您只需验证每个阵列的大小是否相同,您可以根据需要添加任意数量的阵列