1

私は

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回満たしています。ただし、すべてが互いに直接フォローしている場合にのみ、これを行う必要があります。

リンクは何と言うでしょうか?

4

2 に答える 2

1

差が 1 でない場合は anzahleins をリセットする必要があります。また、foreach ループでチェック (==4) を行う必要があります。ここでは、少なくとも 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 に答える