50


5

List <int>にデフォルト値を入力しますか?

_ 可能な重複: + C#リストの自動初期化 _

宣言時に自動的に満たしたい特定の容量を持つ整数のリストがあります。

List x = new List(10);

このリストを、ループしてアイテムを追加するのではなく、intのデフォルト値を持つ10個のintで埋める簡単な方法はありますか?

5 Answer


110


LINQにループ処理を依頼することができます:

List x = Enumerable.Repeat(value, count).ToList();

「デフォルト値」で0を意味するのか、カスタムのデフォルト値を意味するのかは不明です。

配列を作成することで、これをわずかに効率的にすることができます(実行時間の面で、メモリの面では劣ります)。

List x = new List(new int[count]);

これは、配列からリストへのブロックコピーを行います。これは、おそらく `ToList`で必要なループよりも効率的です。


10


int defaultValue = 0;
return Enumerable.Repeat(defaultValue, 10).ToList();


7


固定長のリストがあり、すべての要素にデフォルト値を持たせたい場合は、配列を使用する必要がありますか?

int[] x  = new int[10];

代わりに、これはカスタム拡張メソッドの適切な場所かもしれません

public static void Fill(this ICollection lst, int num)
{
    Fill(lst, default(T), num);
}

public static void Fill(this ICollection lst, T val, int num)
{
    lst.Clear();
    for(int i = 0; i < num; i++)
        lst.Add(val);
}

さらに、Listクラスの特別なオーバーロードを追加して、容量を満たすこともできます。

public static void Fill(this List lst, T val)
{
    Fill(lst, val, lst.Capacity);
}
public static void Fill(this List lst)
{
    Fill(lst, default(T), lst.Capacity);
}

その後、あなたは言うことができます

List x  = new List(10).Fill();


2


Yes

int[] arr = new int[10];
List list = new List(arr);


1


var count = 10;
var list = new List(new int[count]);

追加

デフォルト値でリストを取得する一般的な方法は次のとおりです。

    public static List GetListFilledWithDefaulValues(int count)
    {
        if (count < 0)
            throw new ArgumentException("Count of elements cannot be less than zero", "count");

        return new List(new T[count]);
    }