我有一个具有一定容量的整数列表,我希望在声明时自动填充。
List<int> x = new List<int>(10);
是否有更简单的方法来填充此列表,其中10个int具有int的默认值,而不是循环并添加项目?
答案 0 :(得分:115)
好吧,你可以让LINQ为你做循环:
List<int> x = Enumerable.Repeat(value, count).ToList();
目前还不清楚“默认值”是指0还是自定义默认值。
你可以通过创建一个数组来提高效率(执行时间;内存更差):
List<int> x = new List<int>(new int[count]);
这将从数组块中复制到列表中,这可能比ToList
所需的循环更有效。
答案 1 :(得分:10)
int defaultValue = 0;
return Enumerable.Repeat(defaultValue, 10).ToList();
答案 2 :(得分:7)
如果你有一个固定长度的列表,并且你希望所有的元素都有默认值,那么你可能应该使用一个数组吗?
int[] x = new int[10];
或者,这可能是自定义扩展方法的粘性地方
public static void Fill<T>(this ICollection<T> lst, int num)
{
Fill(lst, default(T), num);
}
public static void Fill<T>(this ICollection<T> lst, T val, int num)
{
lst.Clear();
for(int i = 0; i < num; i++)
lst.Add(val);
}
然后你甚至可以为List类添加一个特殊的重载来填充容量
public static void Fill<T>(this List<T> lst, T val)
{
Fill(lst, val, lst.Capacity);
}
public static void Fill<T>(this List<T> lst)
{
Fill(lst, default(T), lst.Capacity);
}
然后你可以说
List<int> x = new List(10).Fill();
答案 3 :(得分:2)
是
int[] arr = new int[10];
List<int> list = new List<int>(arr);
答案 4 :(得分:1)
var count = 10;
var list = new List<int>(new int[count]);
添加强>
以下是获取默认值列表的通用方法:
public static List<T> GetListFilledWithDefaulValues<T>(int count)
{
if (count < 0)
throw new ArgumentException("Count of elements cannot be less than zero", "count");
return new List<T>(new T[count]);
}