从c#的List中查找不一致的连续对象



我有麻烦从列表中获得连续和非连续的数字。我相信这很简单,但是我就是不懂。

如果consecutiveNum=2,那么如果result from before last and last相等,我需要抛出一个异常。

如果nonConsecutiveNum=4,那么如果从10个片段中有4个具有相同的结果,我需要抛出一个异常。

我正在尝试嵌套循环和一对检查,但我根本没有成功。这两种情况都是一样的,我用System尝试了一些解决方案。LINQ,但是我没有得到我需要的结果。

提前感谢大家!

int consecutiveNum = 2;
int nonConsecutiveNum = 4;
int counter = 1;
var sensInfo = new ResultInfo()
{
Product = CurrentLot.Info.Product,
Result = code
};
if (consecutiveNum > 0)
{
for (int i = ListSensors.Count + 1; i >= 0; i--)
{ 
if (sensInfo.Result == ListSensors[i].Result)
{
counter++;
if (counter >= consecutiveNum)
{
throw new Exception("Consecutive num");
}
}
}
}
if (nonConsecutiveNum > 0)
{
for (int i = 0; i < ListSensors.Count; i++)
{
for (int j = i + 2; j < ListSensors.Count - 2; j++)
{
if (ListSensors[i].Result == ListSensors[i+1].Result)
continue;
if (ListSensors[i].Result == ListSensors[j].Result)
{
counter++;
if (counter >= nonConsecutiveNum)
{
throw new Exception("NonConsecutive num");
}
}
}
}
}
// consecutiveNum
for (int i = ListSensors.Count - 1; i >= 0; i--)
{ 
if (sensInfo.Result == ListSensors[i].Result)
{
counter++;
if (counter >= consecutiveNum)
{
throw new Exception("Consecutive num");
}
}
else
{
counter = 1;
}
}
// nonConsecutiveNum
IDictionary<int, int> resultCountDictionary = new Dictionary<int,int>();
foreach (var listSensor in ListSensors)
{
if (resultCountDictionary.ContainsKey(listSensor.Result))
{
resultCountDictionary[listSensor.Result] = resultCountDictionary[listSensor.Result] + 1;
if (resultCountDictionary[listSensor.Result] >= nonConsecutiveNum)
{
throw new Exception();
}
}
else
{
resultCountDictionary.Add(listSensor.Result, 1);
}
}

连续:

使用MoreLinq的窗口函数:

ListSensors.Window(consecutiveNum).Any(x => x.Distinct().Count() == 1);

Nonconsecutive:

ListSensors.Any(x => ListSensors.Count(s => s == x) >= nonConsecutiveNum);

最新更新