排序一个列表+检测至少5个直接跟随的项目
本文关键字:5个 跟随 项目 检测 一个 列表 排序 | 更新日期: 2023-09-27 18:12:28
我有一个
List<myobject> test
myobject看起来像这样:
public string wert;
public string symbol;
包含wert
的值14
13
13
12
5
5
4
4
3
或
14
4
4
5
13
3
13
5
12
或更多或更少的其他数字。
目标是对它进行排序。我通过
var temp = from mmm in test
orderby Convert.ToInt16(mmm.wert) descending select mmm;
然后我想找出是否有一行至少有5个元素彼此直接跟随。我的意思是,例如:
1-2-3-4-5
所以每个元素之间的差应该是1
我用
myobject vorher = null;
int anzahleins = 0;
foreach (var kl in temp)
{
if (vorher != null)
{
if (Convert.ToInt16(vorher.wert) - Convert.ToInt16(kl.wert) == 1)
anzahleins++;
}
vorher = kl;
}
if (anzahleins >= 4)
return true;
else
return false;
返回
14
13
13
12
5
5
4
4
3
也是正确的,因为它是
14
13
12
5
4
3
满足条件4次。但是,只有当所有元素都直接跟随在一起时,它才应该这样做。
Linq会怎么说?
当差异不为1时,您应该重置anzahleins。您应该在foreach循环中执行check(==4)。现在它只检查是否至少有四个随机匹配。
bool _flag = false;
foreach (var kl in temp)
{
if (vorher != null)
{
if (Convert.ToInt16(vorher.wert) - Convert.ToInt16(kl.wert) == 1)
{
anzahleins++;
}
else anzahleins = 0;
if (anzahleins >= 4) _flag = true;
}
vorher = kl;
}
return _flag
List<MyObject> test = new List<MyObject>();
// populate test
var sorted = test.OrderByDescending(x => Convert.ToInt16(x.Wert)).ToList();
bool flag = false;
int count = 0;
short lastValue = short.MaxValue;
foreach (short wert in sorted.Select(x => Convert.ToInt16(x.Wert)))
{
if (wert - lastValue == 1)
count++;
else
count = 0;
if (count == 4)
{
flag = true;
break;
}
lastValue = wert;
}