2015-06-22 19 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>(); 
    } 
}