![](/img/trans.png)
[英]Need to loop through two loops and use delayed iterations in the inner loop
[英]Is it worth running two While loops to determine initial starting point and number of iterations for a For loop?
我有一個基本的for循環,遍歷一個值數組並在找到某個值時執行代碼。 該數組是從Google表格中獲取的一列真或假值。
// array example: [[false], [false], [false],
// [true], [false], [false],
// [false], [true], [false],
// [false], [false], [false]]
for (i = 0; i < array.length; i++) {
if (array[i][0] === true) {
// execute code
}
是否值得(性能方面)運行兩個While循環來確定For循環應該從哪里開始以及它應該迭代多少次,或者它基本上是否相同?
var c = array.length - 1;
while (array[c][0] === false) {
c--;
}
var d = 0;
while (array[d][0] === false) {
d++;
}
var start_row = d+1;
var end_row = c+1;
for (i = start_row - 1; i < end_row; i++) {
if (array[i][0] === true) {
// execute code
}
這兩個For循環似乎執行完全相同,但我希望得到一些輸入,如果一個優先於另一個以及為什么。 在我看來,第二種情況更有意義,因為For循環不必從數組的最開始一直到最后都不必要地迭代,但是根據這些代碼實際編譯的方式我可能完全錯誤。執行。
提前致謝!
如果您沒有特定的需求來創建額外的循環 - 沒有太多理由這樣做。 無論如何,這兩個while
循環和for
循環將迭代整個數組。 提供示例的主要目標是編寫更少的代碼(我不會使用提供的代碼來提高執行速度),因此我建議只使用單個for
循環來減小邏輯的大小。
Google Apps腳本的當前實現有一些有趣的怪癖,其中之一是聚合數組方法(如map()
, forEach()
, some()
和every()
比vanilla for
循環執行得更好。 我知道這在傳統智慧面前曇花一現,但在幕后工作中有一些奇怪的事情。
看一下以下片段:
var arr = [
[false, false, false],
[true, false, false],
[false, true, false],
[false, false, false]
];
arr.forEach(function(row){
row.forEach(function(item){
// do the things
});
});
信不信由你上面的代碼可能比你的for
循環執行得更快。 G + GAS社區的重要成員之一 - Kanshi Tanaike - 運行了許多基准測試並做出了這一發現。 您可以在以下鏈接查看他的發現:
https://gist.github.com/tanaikech/848aeafaac1ec676900bb78e3ce220b6
希望Apps Script在最終升級為使用Chrome的V8引擎時會以更傳統的方式運行。
沒有因為對於JS解釋為計算成本while
循環是不尊重更好for
辦法,而代碼獲取的可讀性。
識別“緊湊”數據的索引間隔的方法更適用於編譯語言(C / C ++),其中您(或編譯器)可以利用需要在“緊湊”數據陣列中工作的循環展開技術。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.