-4

数値の配列があります(C#):

int[] seq = new[] { 2, 1, 4, 2, 1, 3, 
0, 0, 0, 0, 0, 
1, 5, 2, 3, 7, 
0, 0, 0, 
1, 2, 3, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

上記のシーケンスでは、次のようなものが必要です。

"Group1" - [0, 0, 0, 0, 0]
"Group2" - [0, 0, 0]
"Group3" - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
4

2 に答える 2

0

これは、連続するゼロをグループに入れているようです。私はあなたの結果をに保存します.Dictionary<string, List<int>>ゼロを見つけたら新しいグループを作成し、シーケンスが壊れるまで連続するゼロはすべて同じグループに属することを知っておく必要があります. 次に、次のゼロが見つかったときに新しいグループが開始されます。

何かのようなもの:

int[] seq = new[] { 
    2, 1, 4, 2, 1, 3, 
    0, 0, 0, 0, 0, 
    1, 5, 2, 3, 7, 
    0, 0, 0, 
    1, 2, 3, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};

bool newGroup = false;
Dictionary<string, List<int>> groups = new Dictionary<string, List<int>>();
foreach (int t in seq)
{
    if (t == 0)
    {
        if (!newGroup)
        {
            groups.Add(String.Format("Group{0}", groups.Count + 1), new List<int>());
            newGroup = true;
        }
        groups[groups.Keys.Last()].Add(t);
    }
    else
    {
        newGroup = false;
    }
}

groups.Keys.ToList().ForEach(k => Console.WriteLine("Key {0}: Value: {1}", k, String.Join(", ", groups[k])));

結果:

Key Group1: Value: 0, 0, 0, 0, 0
Key Group2: Value: 0, 0, 0
Key Group3: Value: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
于 2015-06-22T20:44:11.663 に答える
0

今はコンパイルできませんが、sth だと思います。このように動作するはずです...

var prev = seq[0];
var subseq = new List<int> { prev };

var retVal = new List<List<int>>();

for (var i = 1; i < seq.Length; i++)
{
    if (seq[i] == prev)
    {
        subseq.Add(seq[i]);
    }
    else
    {
        if (subseq.Count() > 1) 
        {
            retVal.Add(subseq);
        }

        subseq = new List<int>();
    }
}
于 2015-06-22T20:04:10.370 に答える