2015-06-22 21 views
-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] 
+0

什麼是給你的東西一樣,具體的規定?目前爲止你所得到的信息不足以知道你真正想要什麼。 – hatchet

+0

所以你想採取重複零的序列,並把它們放在自己的數組? –

回答

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 
+0

謝謝,快速回復:) – user1271473

0

廣東話編譯現在,但我想做某事。像這個應該可以工作...

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>(); 
    } 
}