C#交错数组到列表列表

C#交错数组到列表列表,c#,list,jagged-arrays,C#,List,Jagged Arrays,给定一个锯齿状数组: int[][] edges = new int[][] { new int[] {0,1}, new int[] {0,2}, new int[] {0,3}, new int[] {1,4}, }; 有没有更优雅的方法可以做到这一点: var adjlist = new List<List

给定一个锯齿状数组:

int[][] edges = new int[][] 
            {
                new int[] {0,1},
                new int[] {0,2},
                new int[] {0,3},
                new int[] {1,4},
            };
有没有更优雅的方法可以做到这一点:

var adjlist = new List<List<int>>();
            for(int i=0; i<n; i++)
            {
                adjlist.Add(new List<int>());
            }
            
            foreach(var arr in edges)
            {
                int src = arr[0];
                int dst = arr[1];

                adjlist[src].Add(dst);
                adjlist[dst].Add(src);
            }

var adjlist=新列表();

对于(int i=0;i我的假设是,您示例中的代码没有按预期工作(我可能错了)。但是,将锯齿数组转换为列表列表应该像下面这样简单。我怀疑您将获得比这更高的效率,尽管您可以进行基准测试

以下是O(n),这意味着某个地方需要对每个元素进行迭代。也就是说,内存无法被魔法化。如果这样说,
ToList
将调用集合中的
List
构造函数,并使用实例成员
CopyTo
,实例成员反过来使用
Array.Copy
,因此是极端optim针对数据类型和平台进行了分类

var results = edges.Select(x => x.ToList()).ToList();

由于时间复杂度已经尽可能快,因此无法提高时间复杂度—第一维度的线性时间(
new List()
,列表索引和向列表中添加项目都是固定时间操作)。此代码是否按预期/希望的方式工作?因为它执行了一个相当不寻常且可疑的操作。此代码工作正常。它是针对leetcode问题261的,并通过了那里的测试。若要将边列表转换为无向图,请执行以下操作。