2013-06-05 26 views
23

Tôi muốn điền một số List<string> với cùng một giá trị chuỗi cho một số lần được chỉ định.Danh sách phổ biến <string> có cùng giá trị với LINQ

Trong thẳng C# nó là:

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

Có thể làm điều này với LINQ?

+0

http://stackoverflow.com/questions/9361598/populate-a-list-with-a-specific-range-of-numbers-by-using-linq – sarwar026

Trả lời

39

Có, sử dụng Enumerable.Repeat:

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

hay này:

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

Nếu bạn có một danh sách hiện hành mà bạn muốn thêm những yếu tố để, sử dụng này:

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

Lưu ý rằng đây không phải là chính xác LINQ mỗi se, nhưng nó sử dụng các phương pháp mở rộng đã được thêm cùng với LINQ để supp ort cú pháp mới. Với chỉ LINQ (. Tức là "từ ... chọn" cú pháp), đó là một chút khác nhau, sau đó tôi sẽ làm điều này:

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

Tuy nhiên, tôi sẽ không thực làm được điều này, tôi thay vào đó sẽ sử dụng các phương thức của Enumerable.

Ngoài ra, nếu bạn muốn tạo dây khác nhau, tùy thuộc vào việc nó là lần đầu tiên, thứ hai, thứ ba vv mục mà bạn đang thêm, bạn có thể sử dụng thay vì Enumerable.Range:

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

Will tạo ra một danh sách với các dây myString#0, myString#1, myString#2 ...

+1

Điều đó thật tuyệt vời – CSL

+1

@Lasse Giải thích rất chi tiết. Cảm ơn rất nhiều. –

+3

Whoa, whoa, whoa! Có vẻ như tôi có lý do chính đáng để ngừng sử dụng 'Enumerable.Range (0, qty) .Select (n =>" myString ")' now ... :) – fjdumont

17

các công cụ tốt nhất cho công việc là Enumerable.Repeat:

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

Hãy thử điều này:

Enumerable.Range(0, 50).Select(i => "myString").ToList() 
9
var myList = Enumerable.Repeat("myString", 50).ToList(); 
+3

Darn, được ninja bởi @Jon;) –

+0

+1 một, không ít hơn :) –

+0

Ninja +1 đầu tiên! ;-) – Jon

Các vấn đề liên quan