Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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
Swift 过滤器vs,哪一个更便宜?_Swift_Swiftui - Fatal编程技术网

Swift 过滤器vs,哪一个更便宜?

Swift 过滤器vs,哪一个更便宜?,swift,swiftui,Swift,Swiftui,我有一个整数数组1…10。我喜欢用偶数和奇数的名字做两个子数组!一旦我使用for循环,并在一个循环中生成这些子数组,然后我就可以在两个循环中使用过滤器生成相同的数组。我喜欢过滤器的工作方式,但因为它在2个循环中完成工作有点不好,另一方面,我喜欢老式的for循环,因为它在一个循环中完成工作,但正如你所知,它没有过滤的可能性。那么,在这种情况下,我们如何决定哪一个更好呢?我们可以让过滤器在一个循环中生成这些子数组吗 代码: 我必须查看汇编程序才能确定,但我认为过滤器和for uu u u u u u

我有一个整数数组1…10。我喜欢用偶数和奇数的名字做两个子数组!一旦我使用for循环,并在一个循环中生成这些子数组,然后我就可以在两个循环中使用过滤器生成相同的数组。我喜欢过滤器的工作方式,但因为它在2个循环中完成工作有点不好,另一方面,我喜欢老式的for循环,因为它在一个循环中完成工作,但正如你所知,它没有过滤的可能性。那么,在这种情况下,我们如何决定哪一个更好呢?我们可以让过滤器在一个循环中生成这些子数组吗

代码:


我必须查看汇编程序才能确定,但我认为过滤器和for uu u u u u u ;占用的时间相同。因此,对于构建2个数组的循环,2次过滤器传递所需的时间是1次的两倍。因此,与O2n相比。也就是说,在评估时间复杂度时,这样的常数乘数会被忽略。除非您的数据集很大,否则差异可能无法检测,所以您应该使用最容易阅读和维护的表单。

您已经回答了问题。 如果按过滤器进行拆分,则会花费更多时间,因为数组中的每个项都将被检查。我建议你读一读关于时间复杂性的书。 假设您有一个包含一百万个或更多元素的数组,这意味着当使用过滤器时,处理器将经历两百万次操作,而通常的运行只有一百万次。如果条件更复杂,那么你可以平方运算的次数 所以在这种情况下最好的方法是

customArray.forEach{$0 % 2 == 0 ? evenArrayV1.append($0) : oddArrayV1.append($0)}

像swift一样,使用forEach而不是forin

谢谢,所以我应该在我的应用程序的语法糖或性能之间做出选择,也就是说,如果我面对海量数据,那么我应该选择O1,但如果数据不是应用程序中的一个因素,那么我可能应该选择语法糖。我能假设这是一个正确的、合乎逻辑的决定吗?是的。除非您正在处理数十万条记录,否则不要担心性能上的差异。选择代码更容易理解的方法。在性能上与O2n没有太大区别。另一方面,On²的性能将使即使是最快的机器也只能拥有几千条记录。感谢我真的很有兴趣了解On²,这可能是一个糟糕的编程给我们带来了什么,你能告诉我1个或一些案例来了解这种情况并加以预防。你确实应该仔细阅读复杂性。它是计算机科学中的一个重要概念。假设您必须对一组对象进行排序。现在,假设您使用嵌套循环,其中外部循环遍历数组中的每个对象,内部循环遍历该对象之后的每个对象,在对象对无序时进行比较和交换。如果要对n个对象的数组进行排序,则需要进行n²比较。对于100个对象,需要进行10000次比较。对于1000个对象,您将进行一百万次比较。对于一百万个对象,你会做一万亿次的比较。哇,编程真糟糕!谢谢你提供的信息,我没有什么要说的,除非太棒了!你用一块石头打死了两只鸟!感谢有一个叫做isMultipleof的方法:正是为了这个purpose@mimi你的实现很好。我是说V1也使用for loopok、V1和forEach,对吗?
customArray.forEach{$0 % 2 == 0 ? evenArrayV1.append($0) : oddArrayV1.append($0)}