1

我有一个

List<myobject> test 

我的对象看起来像这样:

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 次。但只有当所有人都直接相互关注时,它才应该这样做。

林克会说什么?

4

2 回答 2

1

当差异不是 1 时,您应该重置 anzahleins。并且您应该在 foreach 循环中进行检查 (==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

这应该会给出您期望的结果。

于 2013-05-07T05:32:21.870 回答
0
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;
}
于 2013-05-07T06:13:02.080 回答