用默认值填充List <int>?
可能重复:
自动初始化C#列表
我有一个具有一定容量的整数列表,我希望在声明时自动填充。
List<int> x = new List<int>(10);
是否有一个更简单的方法来填充这个列表,有10个int,默认值为int,而不是循环和添加项目?
那么,你可以问LINQ为你做循环:
List<int> x = Enumerable.Repeat(value, count).ToList();
目前还不清楚“默认值”是指0还是自定义默认值。
你可以通过创build一个数组来使这个效率稍微高一些(在执行时间内;在内存中更糟):
List<int> x = new List<int>(new int[count]);
这将从数组中进行块复制到列表中,这可能比ToList
所需的循环效率更高。
int defaultValue = 0; return Enumerable.Repeat(defaultValue, 10).ToList();
如果你有一个固定长度的列表,你想要所有的元素都有默认值,那么也许你应该只使用一个数组?
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();
是
int[] arr = new int[10]; List<int> list = new List<int>(arr);
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]); }