有一个类似的问题发布,但我没有代表在那个线程中问一个后续问题:(
这个问题和解决方案在这里。
如果我有一个列表,其中包含List.Distinct()重复出现的项目,则将删除重复项,但原始列表仍将保留。如果我想删除重复出现的项目(包括原始项目),最有效的方法是对原始列表进行处理?
给定一个名为oneTime的列表:
{ 4, 5, 7, 3, 5, 4, 2, 4 }
所需的输出将在oneTime中:
{  7, 3, 2 }
谢谢你的帮助!
----编辑和跟进问题@ enigmativity,2016年4月8日-----------------
这是我的脚本正在执行的伪版本。它是在.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
因此,如果您可以拥有一个新列表,那么这是最简单的方法:
var source = new List<int>() { 4, 5, 7, 3, 5, 4, 2, 4 };
var result =
    source
        .GroupBy(x => x)
        .Where(x => !x.Skip(1).Any())
        .Select(x => x.Key)
        .ToList();
这给出:
{7,3,2}
如果要从原始源中删除值,请执行以下操作:
var duplicates =
    new HashSet<int>(
        source
            .GroupBy(x => x)
            .Where(x => x.Skip(1).Any())
            .Select(x => x.Key));
source.RemoveAll(n => duplicates.Contains(n));
| 归档时间: | 
 | 
| 查看次数: | 1245 次 | 
| 最近记录: |