C# 从列表到交错数组

C# 从列表到交错数组,c#,list,jagged-arrays,C#,List,Jagged Arrays,我正在尝试将列表转换为锯齿状数组T[][]。但锯齿状数组中的每个数组都在重复列表的前N个元素。我知道我的代码正是这样做的,但是我如何才能以不同的方式迭代我的列表,这样我就不会遍历相同的N个元素呢 请忽略DataTree类型,它只是用于创建锯齿状数组的参考数据结构拓扑 public static T[][] ToJaggedArrray<T>(this List<T> data, DataTree<T> dataTree) {

我正在尝试将
列表
转换为
锯齿状数组T[][]
。但锯齿状数组中的每个数组都在重复列表的前N个元素。我知道我的代码正是这样做的,但是我如何才能以不同的方式迭代我的列表,这样我就不会遍历相同的N个元素呢

请忽略
DataTree
类型,它只是用于创建锯齿状数组的参考数据结构拓扑

  public static T[][] ToJaggedArrray<T>(this List<T> data, DataTree<T> dataTree)
        {
            // Get total elements on each row
            //dataTree.DataCount = total elements in data structure
            int totalElementsPerArray = dataTree.DataCount / dataTree.BranchCount;

            // dataTree.BranchCount = number of elemets/rows
            int numElements = dataTree.BranchCount;



            T[][] outPut = new T[numElements][];

            for (int i = 0; i < outPut.Length; i++)
            {
                T[] temp = new T[totalElementsPerArray];

                for (int j = 0; j < temp.Length; j++)
                {
                    temp[j] = data[j];

                }

                outPut[i] = temp;
            }

            return outPut;
        }

/* Output:

54
19
83
80
28
48
46
16
52
38
41
10

Element(0): 54 19 83 80
Element(1): 54 19 83 80
Element(2): 54 19 83 80

*/


/* Expected Output:

54
19
83
80
28
48
46
16
52
38
41
10

Element(0): 54 19 83 80
Element(1): 28 48 46 16
Element(2): 52 38 41 10

*/
publicstatict[]ToJaggedArrray(此列表数据,DataTree DataTree)
{
//获取每行的元素总数
//dataTree.DataCount=数据结构中的元素总数
int totalElementsPerArray=dataTree.DataCount/dataTree.BranchCount;
//dataTree.BranchCount=元素数/行数
int numElements=dataTree.BranchCount;
T[][]输出=新的T[numElements][];
for(int i=0;i
我认为您的问题在于不理解循环。在您的情况下,嵌套的for循环将始终从0开始,并始终从数据中精确获取temp.length元素


你明白我的意思了吗?

我不能忽略数据树的问题。看看。它应该做您想要的事情,然后使用
.ToArray()
将返回的结果打包到所需的锯齿数组中。代码中的问题是表达式
temp[j]=data[j]
将首先将
totalElementsPerArray
元素的
数据
复制到每个新的子数组
temp
中。您可能希望考虑已复制的元素,例如,为每个后续目标阵列保留一个计数器或在
数据中计算一个新的偏移量。也就是说,像这样“分块”一个列表(或数组)是一个众所周知的问题,而且已经有很多解决方案可用。看到标记的重复。是的,我知道这正是发生的事情,这就是为什么我问这个问题,你总是得到相同的元素。请尝试使用temp[j]=data[j+temp.Length*i);并注意任何超出范围的索引。请使用try-catch语句将其括起来