Συμπλήρωση λίστας<int> με προεπιλεγμένες τιμές;

Συμπλήρωση λίστας<int> με προεπιλεγμένες τιμές;

Λοιπόν, μπορείτε να ζητήσετε από το LINQ να κάνει το looping για εσάς:

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

Δεν είναι σαφές εάν με τον όρο "προεπιλεγμένη τιμή" εννοείτε το 0 ή μια προσαρμοσμένη προεπιλεγμένη τιμή.

Μπορείτε να το κάνετε λίγο πιο αποτελεσματικό (στο χρόνο εκτέλεσης, είναι χειρότερο στη μνήμη) δημιουργώντας έναν πίνακα:

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

Αυτό θα κάνει ένα μπλοκ αντίγραφο από τον πίνακα στη λίστα, το οποίο πιθανότατα θα είναι πιο αποτελεσματικό από το looping που απαιτείται από το 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();