有沒有一種快速方法可以在不使用 for 循環的情況下創建一個大列表?許多編程語言都有某種形式。
例如製作一個從 1 到 100 的列表:
list = 1:100,
或者
list = range(1,100)
或者
list = {1..100}
或者
list = seq(1,100)
讓我知道! 我在腳本指南中找不到任何內容。
回复:有沒有一種快速方法可以在不使用 for 循環的情況下創建一個大列表?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />這個分析器工具將會派上用場。感謝您分享。
看起來你是對的,它似乎運行得更快的原因是代碼中存在更大的瓶頸。看起來“::”矩陣代碼確實比直觀的 for 循環運行得更快。我通過比較第 10+11 行中的 % 與第 31 行中的 % 得到這一點。
我當前的代碼永遠不會比較大量數據,但我仍然很好奇,因為我預見為大量數據構建類似的腳本,並且擺脫 for 循環是使代碼更快的普遍可靠方法。
回复:有沒有一種快速方法可以在不使用 for 循環的情況下創建一個大列表?不錯的性能測試。
JSL 有一個分析器可以幫助回答性能問題:

我運行它得到這個:

這告訴我將值設置到關聯數組中是此代碼中的瓶頸。(第 10 行與第 11 行。)(第 23 行可能包括第一次打開日誌,忽略它;第 42 行更具代表性。)
大班只有40行。如果您有更多行(10K?),您可能會看到其他瓶頸。不要調用 temparray<
看起來您正在嘗試為列中的每個唯一值創建一個小連續整數的查找表。可能有一種聰明的方法可以做到這一點,但我現在還沒有看到。也許其他人會...也許一些數據庫連接操作?
回复:有沒有一種快速方法可以在不使用 for 循環的情況下創建一個大列表?謝謝,這很有幫助。我希望這會加快我的代碼速度,但感覺 for 循環具有相似的速度,這讓我感到驚訝。有什麼建議麼?
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
t1 = tick seconds();
numberarray = Function({list},
temparray = Associative Array(list);
tempnum = nitems(temparray << Get Keys);
tempitems = temparray << Get Keys;
templist = {};
For(l=1, l<=tempnum, l++, insertinto(templist, l));
temparray = Associative Array(tempitems, templist);
//return(temparray)
);
for(i=1, i<=100,i++,
array = numberarray( Column(dt, 1) );
array2 = numberarray( Column(dt, 2) );
array3 = numberarray( Column(dt, 3) );
array4 = numberarray( Column(dt, 4) );
array5 = numberarray( Column(dt, 5) ););
t2 = tick seconds();
Print( Concat( Char( t2 - t1 ), " seconds." ) );
t1 = tick seconds();
numberarray = Function({list},
temparray = Associative Array(list);
tempnum = nitems(temparray << Get Keys);
tempitems = temparray << Get Keys;
temparray = Associative Array(tempitems, 1::tempnum);
);
for(i=1, i<=100,i++,
array = numberarray( Column(dt, 1) );
array2 = numberarray( Column(dt, 2) );
array3 = numberarray( Column(dt, 3) );
array4 = numberarray( Column(dt, 4) );
array5 = numberarray( Column(dt, 5) ););
t2 = tick seconds();
Print( Concat( Char( t2 - t1 ), " seconds." ) );
回复:有沒有一種快速方法可以在不使用 for 循環的情況下創建一個大列表?
a=3;
b=9;
AsList(a::b)[1]
結果是:
{3, 4, 5, 6, 7, 8, 9}
這裡發生了幾件事: a::b 生成一行矩陣: [3 4 5 6 7 8 9]
AsList( ... ) 將矩陣轉換為列表列表(因為它實際上是二維的,其中一個維度僅為 1。
[1]提取內部列表。
也許您只想要矩陣而不是列表。如果您對快速代碼感興趣,請盡可能使用內置矩陣函數。
這不是來自其他編程語言的神奇迭代器;而是來自其他編程語言的神奇迭代器。它將要在內存中創建完整的矩陣和列表,因此您可能不想創建包含十億個項目的列表。