有張貼了類似的問題,但我沒有代表問一個後續問題在該線程:(刪除列表元素多次出現的更到位
這個問題和解決方案是HERE。
如果我有一個列表包含的項目出現多次,List.Distinct()
將刪除重複,但原始仍然會保留在原位如果我想刪除不止一次的項目,包括原始,什麼會是對原始列表執行此操作的最有效方式嗎?
給定一個名爲oneTi的列表我: { 4, 5, 7, 3, 5, 4, 2, 4 }
所需的輸出將是一次性的: { 7, 3, 2 }
感謝您的幫助!
----編輯和後續問題的@enigmativity,8April2016 -----------------
這裏是我的腳本的僞版本是在做。它是在.NET3.5上運行的NinjaTrader中完成的。
我會附上關於代碼應該做什麼的一般概念,我會附上實際的腳本,但除非使用NinjaTrader,否則可能無法使用。
但基本上,有一個大的z循環。每次通過時,都會在'LiTics'中添加一系列數字。我不想打擾。然後我將該列表傳遞給該函數,並返回僅出現一次的值列表。然後我希望每次都能看到這些數字。
它最初起作用,但是在各種數據集上運行它,經過幾次循環後,它開始報告不止一次出現的值。我不確定爲什麼?
for(int z=1; z<=10000; z +=1)//Runs many times
{
if (BarsInProgress ==0 &&CurrentBar-oBarTF1>0 &&startScript) //Some Condition
{
for(double k=Low[0]; k<=High[0]; k +=TickSize)
{
LiTics.Add(k);
//Adds a series of numbers to this list each time through z loop
//This is original that I do not want to disturb
}
LiTZ.Clear(); //Display list to show me results Clear before populating
LiTZ=GetTZone(LiTics); //function created in thread(below)
//Passing the undisturbed list that is modified on every loop
foreach (double prime in LiTZ) { Print(Times[0] +", " +prime); }
//Printing to see results
}
}//End of bigger 'z' loop
//Function created to get values that appear ONLY once
public List<double> GetTZone(List<double> sequence)
{
var result =
sequence
.GroupBy(x => x)
.Where(x => !x.Skip(1).Any())
.Select(x => x.Key)
.ToList();
return result;
}
打印出來什麼的圖片是哪裏錯了: http://i.stack.imgur.com/pXcdK.jpg
那你爲什麼不把結果分配給原始列表呢? – rcs