假设我有一个简单的List<bool>
。我想初始化它并添加100个元素。为此,我可以这样做:
var myList = new List<bool>();
for (int i = 0; i < 100; i++)
{
myList.Add(false);
}
但这不是最优雅的方法。有没有内置的方法来简化它?我不想要任何循环,仅仅是为了好奇
答案 0 :(得分:36)
答案 1 :(得分:13)
您可以使用LINQ,更具体地说是Select
和ToList
扩展方法:
var myList = Enumerable.Range(1, 100).Select(x => false).ToList();
答案 2 :(得分:12)
false
很简单,因为它是boolean的默认值:
new List<bool>(new bool[100]);
答案 3 :(得分:5)
List<T>
没有具体的方法来执行此操作。循环是你最好的选择。
但是,通过使用初始容量初始化列表,可以在运行时提高效率:
var myList = new List<bool>(100);
使用此构造函数时,列表将在内部分配一个包含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);
}
}
您可以这样使用它:
var myList = new List<bool>();
myList.Initialize(false, 100);
您拥有的另一个选择是使用数组。
var myList = new bool[100];
这个具体示例的有趣之处在于您不必初始化数组。由于false
是bool
的默认值,因此数组中的所有元素都将自动具有值false
。如果您的列表不需要动态调整大小,那么这当然是一个需要考虑的选项。
答案 4 :(得分:3)
您可以使用List.AddRange:
List<bool> list = new List<bool>();
list.AddRange(Enumerable.Repeat(default(bool), 100));