日期:2014-05-18  浏览次数:20799 次

数组分类的算法
struct H
{
  int Id;
  int Group;
}

现有数组如A = new H[11];  
A[1].Id = 1; A[1].Group = 1;  
A[2].Id = 2; A[2].Group = 1;  
A[3].Id = 1; A[3].Group = 1;  
A[4].Id = 2; A[4].Group = 1; 
A[5].Id = 1; A[5].Group = 2;  
A[6].Id = 2; A[6].Group = 2; 
A[7].Id = 1; A[7].Group = 2;  
A[8].Id = 2; A[8].Group = 2; 
A[9].Id = 1; A[9].Group = 2;  
A[10].Id = 2; A[10].Group = 2;

如何通过分类Group属性计算快速得到数组
B[][]{{A[1],A[2],A[3],A[4],A[5]}{A[6],A[7],A[8],A[9],A[10]} }

------解决方案--------------------
C# code

            H[] A = new H[11];
            A[0].Id = 1; A[0].Group = 1;
            A[1].Id = 1; A[1].Group = 1;
            A[2].Id = 2; A[2].Group = 1;
            A[3].Id = 1; A[3].Group = 1;
            A[4].Id = 2; A[4].Group = 1;
            A[5].Id = 1; A[5].Group = 2;
            A[6].Id = 2; A[6].Group = 2;
            A[7].Id = 1; A[7].Group = 2;
            A[8].Id = 2; A[8].Group = 2;
            A[9].Id = 1; A[9].Group = 2;
            A[10].Id = 2; A[10].Group = 2;

            List<int> list = new List<int>();
            for (int i = 0; i < A.Length; i++)
            {
                if (!list.Contains(A[i].Id))
                    list.Add(A[i].Id);
            }
            H[][] B = new H[list.Count][];
            for (int i = 0; i < list.Count; i++)
            {
                List<H> list2 = new List<H>();
                foreach (H h in A)
                {
                    if (h.Group == list[i])
                        list2.Add(h);
                }
                B[i] = list2.ToArray();
            }

------解决方案--------------------
B[][]{{A[1],A[2],A[3],A[4],A[5]}{A[6],A[7],A[8],A[9],A[10]} }

这个结果有问题吧? 我做出来怎么是 B[][]{{A[1],A[2],A[3],A[4]}{A[5],A[6],A[7],A[8],A[9],A[10]} }
这个啊 我是根据LZ的测试数据做的啊

实现步骤就是循环 然后做标记 然后组织 就可以拉

我是小菜鸟! 说的不好清见谅, 希望能够帮到你!