让我说我有一个简单的List<bool>
.我想初始化它并添加例如100个元素.为此,我可以这样做:
var myList = new List<bool>();
for (int i = 0; i < 100; i++)
{
myList.Add(false);
}
Run Code Online (Sandbox Code Playgroud)
但这不是最优雅的方法.有没有内置的方法来简化它?我不想要任何循环,仅仅是为了好奇
Ond*_*cek 36
var myList = Enumerable.Repeat(false, 100).ToList();
Run Code Online (Sandbox Code Playgroud)
哪一个
生成包含一个重复值的序列.
Dar*_*rov 13
您可以使用LINQ,更具体地说,使用Select
和ToList
扩展方法:
var myList = Enumerable.Range(1, 100).Select(x => false).ToList();
Run Code Online (Sandbox Code Playgroud)
Lua*_*aan 12
false
很简单,因为它是boolean的默认值:
new List<bool>(new bool[100]);
Run Code Online (Sandbox Code Playgroud)
List<T>
没有具体的方法来做到这一点.循环是您的最佳选择.
但是,通过使用初始容量初始化列表,可以在运行时提高效率:
var myList = new List<bool>(100);
Run Code Online (Sandbox Code Playgroud)
使用此构造函数时,列表将在内部分配一个包含100个元素的数组.如果使用默认构造函数,它将从第一个0开始,然后是4个元素.添加4个项目后,列表将分配一个包含8个元素的数组,并复制已添加的4个元素.然后它将增长到16,32,64,最后是128.通过使用具有初始容量的构造函数,可以避免所有这些分配和复制操作.
或者,如果您需要在程序的不同位置执行此操作,则可以使用扩展方法:
public static void Initialize<T>(this List<T> list, T value, int count)
{
if (list == null)
{
throw new ArgumentNullException("list");
}
if (list.Count != 0)
{
throw new InvalidOperationException("list already initialized");
}
if (list.Capacity < count)
{
list.Capacity = count;
}
for (int i = 0, i < count, i++)
{
list.Add(value);
}
}
Run Code Online (Sandbox Code Playgroud)
你会像这样使用它:
var myList = new List<bool>();
myList.Initialize(false, 100);
Run Code Online (Sandbox Code Playgroud)
您拥有的另一个选项是使用数组.
var myList = new bool[100];
Run Code Online (Sandbox Code Playgroud)
这个具体示例的有趣之处在于您不必初始化数组.由于false
是默认值bool
,因此数组中的所有元素都将自动具有该值false
.如果您的列表不需要动态调整大小,那么这当然是一个需要考虑的选项.
归档时间: |
|
查看次数: |
7970 次 |
最近记录: |