比較兩個清單並識別不常見元素的快速方法有誰知道比較兩個列表並識別任何不同列表元素(即不常見元素)的快速方法?我可以使用兩個嵌套循環來完成此操作,但就像 JSL 中的許多事情一樣,我希望可能有一些晦澀的、更簡單的方法。 DJ
當然,我的清單比這個大很多:
list1={"蘋果","梨","橘子","獼猴桃","西瓜"};
list2={"蘋果","梨","柳橙","獼猴桃","草莓","西瓜"};
找到任何不同/不常見的元素,在本例中為“草莓”。
回覆:比較兩個清單(不常見元素)的快速方法?您必須針對不同的大小和不同的 JSL 循環方法對其進行基準測試。 我猜集合中 2 到 10 個項目使用關聯數組會更快。 在大小為 1 時,關聯數組有點過分了,但它的構建速度仍然相當快……大約每秒一百萬……
start = tickseconds();
for(i=1,i<=1e6,i++,
a=associativearray({"a","b"});
b=associativearray({"a","b"});
c=associativearray({"a","b"});
d=associativearray({"a","b"});
e=associativearray({"a","b"});
);
stop=tickseconds();
aatime=(stop-start);
write("\!ntime for 5,000,000 associative arrays:",aatime);
start = tickseconds();
for(i=1,i<=1e6,i++,
a=1;
b=2;
c=3;
d=4;
e=5;
);
stop=tickseconds();
satime=(stop-start);
write("\!ntime for 5,000,000 simple assingments:",satime);
write("\!nsimple/associative=", satime/aatime);
/*:
time for 5,000,000 associative arrays:5.8166666666657
time for 5,000,000 simple assingments:0.283333333325572
simple/associative=0.0487106017178716
對於您建立的每個關聯數組,您可能無法執行超過大約 20-30 個簡單的 JSL 語句。
回覆:比較兩個清單(不常見元素)的快速方法?對此的簡單問題是,使用關聯數組與循環節省的時間幾乎總是大於創建關聯數組與列表所需的開銷嗎?
回覆:比較兩個清單(不常見元素)的快速方法?而且不常見的方法不需要先找到交集。 這只是區別。
set1=associativearray({"apple","grape","orange","kiwi","watermelon"});
set2=associativearray({"apple","pear","orange","kiwi","strawberry","watermelon"});
uncommon1 = set1; uncommon1<<REMOVE></REMOVE>回覆:比較兩個清單(不常見元素)的快速方法?另外:如果集合的成員以從 1 開始的連續整數命名,則可以使用矩陣非常有效地解決此問題。 但是,正如命名集成員所呈現的那樣,關聯數組可能比排序更好,並且絕對比 N^2 對嵌套循環更好。
回覆:比較兩個清單(不常見元素)的快速方法?set1=associativearray({"apple","grape","orange","kiwi","watermelon"});
set2=associativearray({"apple","pear","orange","kiwi","strawberry","watermelon"});
set3=associativearray({"apple","pear","watermelon"});
intersection=set1;intersection<<INTERSECT></INTERSECT>
"common (intersection) items:"
{"apple", "kiwi", "orange", "watermelon"}
"all (union) items"
{"apple", "grape", "kiwi", "orange", "pear", "strawberry", "watermelon"}
set1HasSet3 << Contains(set3) = 0;
set2HasSet3 << Contains(set3) = 1;
關聯數組非常適合處理數百萬個值,特別是與編寫循環數百萬個值的 JSL 腳本相比。
腳本索引包含用作集合的關聯數組的詳細資訊。 以下是不常見的物品:
set1=associativearray({"apple","grape","orange","kiwi","watermelon"});
set2=associativearray({"apple","pear","orange","kiwi","strawberry","watermelon"});
intersection=set1;intersection<<INTERSECT></INTERSECT>
回覆:比較兩個清單(不常見元素)的快速方法?@多發性硬化症:
到目前為止,您提供的這個解決方案在很多方面對我都非常有幫助,我首先要感謝您。
我還想詢問,當我們處理非常大的數據集(例如每個數據集有幾百萬個項目)時,這種方法將需要大量的內存,並且將元素插入到新表中似乎效率不高。 有沒有更有效的方法來識別兩個資料表中兩列之間的不常見元素,即如果資料表1 (dt1) 中的列1 和資料表2 (dt2) 中的列1 有大量數字,我們可以將它們進行比較嗎更有效的方法?
最好的
烏代
回覆:比較兩個清單(不常見元素)的快速方法?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我也想知道。 可以使用 Intersect() 找到常見項目(見下文),但我不知道不常見項目的對應函數。
數據表比列表有更多選項。 下面的腳本透過臨時資料表識別不常見的元素。 它可能比循環遍歷長列表更快,但我沒有比較過
列表1 = { “蘋果” , “梨” , "橘子" , "奇異果" , “西瓜” , “芒果” } ;
列表2 = { “蘋果” , “梨” , "奇異果" , "橘子" , “草莓” , “西瓜” , “瓜” } ;
dt =新表( “溫度” ,
新專欄( “格” ,特點,設定值(列表1 ||列表2 ) ) ,
新專欄( “nr” ,數位,公式( 1 ) ,評估公式) ,
無形的
) ;
總結( G =經過( dt :格) , n =數數( dt :號) ) ;
不常見= G [洛克(作為列表( n ) , 1 )] ;
常見的=關聯數組(列表1 ) <<相交(關聯數組(列表2 ) ) <<取得密鑰;
展示(常見的,不常見) ;
關閉( dt ,不保存) ;