30

私が達成しようとしているのは、ループを使用せずに 1 つの項目を複数回リストに追加することです。

リストに 50 個の数字を追加し、それらのすべての数字を 42 に等しくしたいとします。50 回実行され、同じアイテムを何度も追加する小さなループを簡単に作成できることを認識しています。 、 そのような;

List<int> listFullOfInts = new List<int>();
int addThis = 42;
for(int i = 0; i < 50; i++)
    listFullOfInts.Add(addThis);

私がやろうとしているのは、次のようなことです。

listFullOfInts.AddRange(addThis, 50);

または、少なくともこれに似た何か、おそらくLinqを使用していますか? これを行う方法を見たという漠然とした記憶がありますが、見つけることができません。何か案は?

4

2 に答える 2

58

使用できますRepeat

List<int> listFullOfInts = Enumerable.Repeat(42, 50).ToList();

デモ

すでにリストがあり、次の方法で新しいリストを作成したくない場合ToList:

listFullOfInts.AddRange(Enumerable.Repeat(42, 50));

同じ参照を繰り返さずに参照タイプを追加したい場合は、Enumerable.Range+を使用できSelectます。

List<SomeClass> itemList = Enumerable.Range(0, 50)
    .Select(i => new SomeClass())
    .ToList();
于 2013-06-18T12:41:51.790 に答える
4

LINQ には副作用がないため、LINQ を直接使用することはできませんが、System.linq 名前空間にあるものの一部を使用して、必要なものを構築できます。

public static void AddRepeated<T>(this List<T> self,T item, int count){
  var temp = Enumerable.Repeat(item,count);
  self.AddRange(temp);
}

その後、投稿で提案するときにそれを使用できます

listFullOfInts.AddRepeated(addThis, 50);
于 2013-06-18T12:48:23.253 に答える