Запаўняем List <String> з тым жа значэннем з дапамогай LINQ

I want to populate a List with the same string value for a specified number of times.

У прамой C# гэта:

List myList = new List();
for (int i = 0; i < 50; ++i)
{
    myList.Add("myString");
}

Ці можна зрабіць гэта з дапамогай LINQ?

23
дададзена аўтар sarwar026, крыніца

10 адказы

Так, выкарыстоўвайце Enumerable.Repeat :

var myList = Enumerable.Repeat("myString", 50).ToList();

ці гэта:

var myList = new List(Enumerable.Repeat("myString", 50));

Калі ў вас ёсць існуючы спіс, які вы хочаце дадаць гэтыя элементы да, выкарыстоўвайце:

myList.AddRange(Enumerable.Repeat("myString", 50));

Звярніце ўвагу, што гэта не зусім LINQ самога па сабе, але ён выкарыстоўвае метады пашырэння, якія былі дададзены разам з LINQ для падтрымкі новага сінтаксісу. З толькі LINQ (. Гэта значыць «з ... абярэце» сінтаксіс), гэта крыху па-іншаму, то я хацеў бы зрабіць гэта:

var myList = (from idx in Enumerable.Range(0, 50) select "myString").ToList();

Аднак, я б не стаў на самой справе зрабіць гэта, я б замест таго, каб выкарыстоўваць метады перечислимых .

Акрамя таго, калі вы хочаце стварыць розныя радкі, у залежнасці ад таго, ці з'яўляецца яна першай, другі, трэці і г.д. элемент вы дадаеце, вы можаце выкарыстоўваць Enumerable.Range замест гэтага:

var myList = Enumerable.Range(0, 50).Select(idx => "myString#" + idx).ToList();

Ці будзе стварыць спіс з радкамі туЗЬптд # 0 , туЗЬптд # 1 , туЗЬптд # 2 , ...

40
дададзена
@Lasse Вельмі падрабязнае тлумачэнне. Вялікі дзякуй.
дададзена аўтар Simon Linder, крыніца
гэта бліскучае
дададзена аўтар CSL, крыніца
Стой, стой, стой! Падобна на тое, у мяне ёсць добрая нагода, каб адмовіцца ад выкарыстання Enumerable.Range (0, кол-во) .Select (п => "туЗЬптд") цяпер ... :)
дададзена аўтар fjdumont, крыніца

Так, выкарыстоўвайце Enumerable.Repeat :

var myList = Enumerable.Repeat("myString", 50).ToList();

ці гэта:

var myList = new List(Enumerable.Repeat("myString", 50));

Калі ў вас ёсць існуючы спіс, які вы хочаце дадаць гэтыя элементы да, выкарыстоўвайце:

myList.AddRange(Enumerable.Repeat("myString", 50));

Звярніце ўвагу, што гэта не зусім LINQ самога па сабе, але ён выкарыстоўвае метады пашырэння, якія былі дададзены разам з LINQ для падтрымкі новага сінтаксісу. З толькі LINQ (. Гэта значыць «з ... абярэце» сінтаксіс), гэта крыху па-іншаму, то я хацеў бы зрабіць гэта:

var myList = (from idx in Enumerable.Range(0, 50) select "myString").ToList();

Аднак, я б не стаў на самой справе зрабіць гэта, я б замест таго, каб выкарыстоўваць метады перечислимых .

Акрамя таго, калі вы хочаце стварыць розныя радкі, у залежнасці ад таго, ці з'яўляецца яна першай, другі, трэці і г.д. элемент вы дадаеце, вы можаце выкарыстоўваць Enumerable.Range замест гэтага:

var myList = Enumerable.Range(0, 50).Select(idx => "myString#" + idx).ToList();

Ці будзе стварыць спіс з радкамі туЗЬптд # 0 , туЗЬптд # 1 , туЗЬптд # 2 , ...

40
дададзена
@Lasse Вельмі падрабязнае тлумачэнне. Вялікі дзякуй.
дададзена аўтар Simon Linder, крыніца
гэта бліскучае
дададзена аўтар CSL, крыніца
Стой, стой, стой! Падобна на тое, у мяне ёсць добрая нагода, каб адмовіцца ад выкарыстання Enumerable.Range (0, кол-во) .Select (п => "туЗЬптд") цяпер ... :)
дададзена аўтар fjdumont, крыніца

Так, выкарыстоўвайце Enumerable.Repeat :

var myList = Enumerable.Repeat("myString", 50).ToList();

ці гэта:

var myList = new List(Enumerable.Repeat("myString", 50));

Калі ў вас ёсць існуючы спіс, які вы хочаце дадаць гэтыя элементы да, выкарыстоўвайце:

myList.AddRange(Enumerable.Repeat("myString", 50));

Звярніце ўвагу, што гэта не зусім LINQ самога па сабе, але ён выкарыстоўвае метады пашырэння, якія былі дададзены разам з LINQ для падтрымкі новага сінтаксісу. З толькі LINQ (. Гэта значыць «з ... абярэце» сінтаксіс), гэта крыху па-іншаму, то я хацеў бы зрабіць гэта:

var myList = (from idx in Enumerable.Range(0, 50) select "myString").ToList();

Аднак, я б не стаў на самой справе зрабіць гэта, я б замест таго, каб выкарыстоўваць метады перечислимых .

Акрамя таго, калі вы хочаце стварыць розныя радкі, у залежнасці ад таго, ці з'яўляецца яна першай, другі, трэці і г.д. элемент вы дадаеце, вы можаце выкарыстоўваць Enumerable.Range замест гэтага:

var myList = Enumerable.Range(0, 50).Select(idx => "myString#" + idx).ToList();

Ці будзе стварыць спіс з радкамі туЗЬптд # 0 , туЗЬптд # 1 , туЗЬптд # 2 , ...

40
дададзена
@Lasse Вельмі падрабязнае тлумачэнне. Вялікі дзякуй.
дададзена аўтар Simon Linder, крыніца
гэта бліскучае
дададзена аўтар CSL, крыніца
Стой, стой, стой! Падобна на тое, у мяне ёсць добрая нагода, каб адмовіцца ад выкарыстання Enumerable.Range (0, кол-во) .Select (п => "туЗЬптд") цяпер ... :)
дададзена аўтар fjdumont, крыніца

Лепшы інструмент для працы з'яўляецца Enumerable.Repeat :

var myList = Enumerable.Repeat("myString", 50).ToList();
17
дададзена

Лепшы інструмент для працы з'яўляецца Enumerable.Repeat :

var myList = Enumerable.Repeat("myString", 50).ToList();
17
дададзена
var myList = Enumerable.Repeat("myString", 50).ToList();
9
дададзена
Ninja +1 першы, як добра! ;-)
дададзена аўтар Jon, крыніца
Цыраваць, ninjaed ад @ Джон;)
дададзена аўтар Matthew Watson, крыніца
+1 адна, тым не менш :)
дададзена аўтар Jens Kloster, крыніца
var myList = Enumerable.Repeat("myString", 50).ToList();
9
дададзена
Ninja +1 першы, як добра! ;-)
дададзена аўтар Jon, крыніца
Цыраваць, ninjaed ад @ Джон;)
дададзена аўтар Matthew Watson, крыніца
+1 адна, тым не менш :)
дададзена аўтар Jens Kloster, крыніца
var myList = Enumerable.Repeat("myString", 50).ToList();
9
дададзена
Ninja +1 першы, як добра! ;-)
дададзена аўтар Jon, крыніца
Цыраваць, ninjaed ад @ Джон;)
дададзена аўтар Matthew Watson, крыніца
+1 адна, тым не менш :)
дададзена аўтар Jens Kloster, крыніца

Паспрабуйце гэта:

Enumerable.Range(0, 50).Select(i => "myString").ToList()
4
дададзена

Паспрабуйце гэта:

Enumerable.Range(0, 50).Select(i => "myString").ToList()
4
дададзена