C# 大规模插入数据结构

3
在C#中,您可以执行以下操作:
List<int> registers = new List<int> { 1, 2, 3, 4 };

这将生成一个包含1、2、3和4的列表。假设我从某个函数中得到了一个列表,我想插入一堆数字,如下所示:
List<int> register = somewhere();
register.Add(1);
register.Add(2);
register.Add(3);
register.Add(4);

有没有像上面的代码片段那样更清晰的方法来实现这个功能?

2
我感到相当失望,我原本期待着一些“巨大”的东西:P - Kobi
是的,如果你正在使用集合初始化程序硬编码真正大规模的插入操作,那就是TDWTF材料。 - R. Martinho Fernandes
3个回答

4
假设新项目已经以某种可枚举的形式存在,AddRange() 方法允许您一次性添加它们所有:
var toBeAdded = new int[] { 1,2,3,4 };
register.AddRange(toBeAdded);

2
你是指像这样的东西吗?
List<int> register = somewhere();
register.AddRange(new List<int> { 1, 2, 3, 4 });

1
请注意,虽然您的示例语法更清晰,但它不会提供任何性能优势,因为集合初始化程序仍会逐个添加项目。 - Tamas Czinege
1
补充DrJokepu的评论:具体问题在于,如果多次调用Add(集合初始化器的语法糖),如果您恰好有足够的元素(可能是30个以上),则会始终调整内部数组大小超过一次,而AddRange 可能即使在这些情况下也只执行单个调整大小操作。如果使用数组初始化程序,则不会进行任何调整大小操作。 - R. Martinho Fernandes

0
我认为你可以得到最干净的代码是这样的:
List<int> register = somewhere();
register.AddRange(new[] { 1, 2, 3, 4 });

然而,有时候隐式地为数组指定类型是不可能的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接