【发布时间】:2015-09-16 08:05:07
【问题描述】:
我正在创建一个新的 C# 列表 (List<double>)。除了对列表进行循环之外,有没有办法将所有起始值初始化为 0?
【问题讨论】:
-
这是可行的,但 .net 中的列表没有定义的大小,所以它是一种点点
标签: c# .net list collections
我正在创建一个新的 C# 列表 (List<double>)。除了对列表进行循环之外,有没有办法将所有起始值初始化为 0?
【问题讨论】:
标签: c# .net list collections
除了提供的功能解决方案(使用Enumerable 类上的静态方法),您还可以在构造函数中传递doubles 数组。
var tenDoubles = new List<double>(new double[10]);
这是可行的,因为double 的默认值已经是 0,而且性能可能会稍微好一些。
【讨论】:
List<T> 构造函数复制它的数组,所以这个方法分配了两个数组。 LINQ 方法使用迭代器而不分配太多内存。另一方面,给它一个数组将允许它使用正确的大小,如果元素多于List<T> 的默认容量,这将保存数组调整大小。 (8,IIRC)
你可以使用初始化器:
var listInt = new List<int> {4, 5, 6, 7};
var listString = new List<string> {"string1", "hello", "world"};
var listCustomObjects = new List<Animal> {new Cat(), new Dog(), new Horse()};
所以你可以使用这个:
var listInt = new List<double> {0.0, 0.0, 0.0, 0.0};
否则,使用默认构造函数,List 将为空。
【讨论】:
使用此代码:
Enumerable.Repeat(0d, 25).ToList();
new List<double>(new double[25]); //Array elements default to 0
【讨论】:
一种可能性是使用Enumerable.Range:
int capacity;
var list = Enumerable.Range(0, capacity).Select(i => 0d).ToList();
另一个是:
int capacity;
var list = new List<double>(new double[capacity]);
【讨论】:
有点晚了,但也许仍然感兴趣: 使用 LINQ,试试
var initializedList = new double[10].ToList()
...希望避免复制列表(现在取决于 LINQ)。
这应该是对 Michael Meadows 回答的评论,但我缺乏声誉。
【讨论】:
对于更复杂的类型:
List<Customer> listOfCustomers =
new List<Customer> {
{ Id = 1, Name="Dave", City="Sarasota" },
{ Id = 2, Name="John", City="Tampa" },
{ Id = 3, Name="Abe", City="Miami" }
};
【讨论】: