Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Swift removeSubrange足够快吗?_Arrays_Swift_Performance - Fatal编程技术网

Arrays Swift removeSubrange足够快吗?

Arrays Swift removeSubrange足够快吗?,arrays,swift,performance,Arrays,Swift,Performance,在处理非常大的阵列(例如75000个样本)时,removeSubrange功能是否足够快?或者我应该使用其他更快的方法 我可以通过两种方式使用removeSubrange,如下所示。计算时间是否存在差异,特别是对于大样本量 import UIKit var xt1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] var xt2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] xt1.removeSubrange(ClosedRange(unche

在处理非常大的阵列(例如75000个样本)时,
removeSubrange
功能是否足够快?或者我应该使用其他更快的方法

我可以通过两种方式使用
removeSubrange
,如下所示。计算时间是否存在差异,特别是对于大样本量

 import UIKit

 var xt1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 var xt2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 xt1.removeSubrange(ClosedRange(uncheckedBounds: (lower: 7, upper: 9)))

 xt2.removeSubrange(7...9)

 print("Method 1:", xt1)

 print("Method 2:", xt2)

从文档
中删除SubRange

复杂性:O(n),其中n是集合的长度

这么小的尺寸适合你

var x = Array(repeating: "yes", count: 750000)
然后我使用Brad Larson的代码进行测量:

func timeElapsedInSecondsWhenRunningCode(operation: ()->()) -> Double {
    let startTime = CFAbsoluteTimeGetCurrent()
    operation()
    let timeElapsed = CFAbsoluteTimeGetCurrent() - startTime
    return Double(timeElapsed)
}
因此,让我们尝试进行测量

timeElapsedInSecondsWhenRunningCode {
    x.removeSubrange(4543...72000)
}
需要0.03秒

现在你可以做一些测量并找出答案

这是一个完整的代码,它将进行32次迭代,以测量随机范围内的性能

var x = Array(repeating: "yes", count: 750000)

func timeElapsedInSecondsWhenRunningCode(from: Int, to: Int, operation: ()->()) -> Double {
    let startTime = CFAbsoluteTimeGetCurrent()
    operation()
    let timeElapsed = CFAbsoluteTimeGetCurrent() - startTime
    return Double(timeElapsed)
}

struct Test {
    var range:(Int, Int)
    var time:Double
}

var mesurments = [Int:Test]()

for i in 0...32 {

    let from  = randomInt(min: 0, max: x.count/2)

    let to = randomInt(min: from, max: x.count)

    let z = x

    let time = timeElapsedInSecondsWhenRunningCode(from: from, to: to, operation: {
            x.removeSubrange(from...to)
    })

    x = z

    mesurments[i] = Test(range: (from, to), time: time)
}


func randomInt(min: Int, max:Int) -> Int {
    return min + Int(arc4random_uniform(UInt32(max - min + 1)))
}

你测量了差异吗?你有没有用仪器来分析你的应用程序,看看这些呼叫是否是你应用程序中的瓶颈?我还没有。只是好奇语法上的差异。但是你问的是性能/计算时间,而不是语法(答案总是:首先测量和配置文件)。好的,我会做的。我想知道有人已经知道了!请注意,在这两种情况下调用相同的方法,唯一的区别是如何创建范围。因此,我敢打赌根本没有性能差异。