C# 锯齿状数组到列表列表

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

改进时间复杂度的东西是理想的。

谢谢。

最佳答案

我的假设是您的示例中的代码未按您的预期运行(我可能错了)。然而,将锯齿状数组转换为列表列表应该像下面这样简单。我怀疑你会比这更有效率,尽管你可以进行基准测试。

以下是 O(n),这意味着某处需要迭代每个元素。也就是说,内存不能被魔法。也就是说,ToList 将使用 collection 调用 List 构造函数并使用实例成员 CopyTo,其中 - turn 使用 Array.Copy,因此极度针对数据类型和平台进行了优化。

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

关于C# 锯齿状数组到列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65712821/

相关文章:

c# - Asp.net c# 中的偏移 div 元素

c# - 通过 for 循环初始化带有 Lists<int> 的交错数组

c# - 泛型类型的静态构造函数如何工作?

c# - 在 C# 中格式化 MAC 地址

python - python中列表的减法,优化速度

html - 带有框和多列列表的奇怪 CSS 行为

android - 动态更新 PhoneGap 应用程序的 dojox EdgeToEdge 列表

c# - 反序列化未知维度的锯齿状数组

c# - 带有两个二维数组的锯齿状数组

c# - 如何在VS2017中为类库创建类图?