2009-08-17 31 views
5

Trong python bạn có thể làm một cái gì đó như thế này:Danh sách Fill <int> sử dụng LINQ

arr = list(set(randint(-50, 50) for _ in range(10))) 

tôi biết làm thế nào để chương trình một phương pháp mở rộng mà điền vào một mảng, danh sách hoặc bất cứ điều gì bạn cần với giá trị ngẫu nhiên. Tôi thấy điều này rườm rà mặc dù, và tôi thực sự ngưỡng mộ làm thế nào bạn có thể làm điều đó trong python. Mặc dù, tôi chỉ biết về Enumerable.Range, chỉ có thể được sử dụng để tạo chuỗi cố định, theo hiểu biết của tôi.

Có thể trong C# không?

Trả lời

10

Bạn có thể làm như thế này:

Random rnd = new Random(); 
List<int> = Enumerable.Range(0,10).Select(n => rnd.Next(-50, 51)).ToList(); 
+0

Ah, tôi chỉ đơn giản là không thể tìm ra cách để gọi chọn cùng với Enumerable.Range. Cảm ơn! – CasperT

+0

+1 Đó là giải pháp mà tôi vừa kết hợp với nhau, nhưng bạn đã đánh tôi với nó. –

+0

Điều này có thể không trả về số trùng lặp trong danh sách không? –

2
var r = new Random(); 

var l = Enumerable.Range(10).Select(x => r.Next(100) - 50).ToList(); 
+1

này không biên dịch. 'Enumerable.Range' lấy hai đối số - bắt đầu và đếm. Bạn cần phải chuyển số 0 làm đối số đầu tiên. – adrianbanks

+0

Vâng, tôi đã không kiểm tra. – leppie

2

Chắc chắn, Một cái gì đó giống như ...

Random r = new Random(); 
var ints = Enumerable.Range(0, 50).OrderBy(i => r.Next()); 
+0

Lưu ý, điều này là giống như một shuffle (nếu đó là những gì bạn đang sau) khác khôn ngoan lựa chọn là câu trả lời tốt hơn. –

+0

Lưu ý rằng có một chút nghiêng với phương pháp đó khi bạn nhận được số ngẫu nhiên trùng lặp. Phương thức shuffle tốt nhất là một phương thức cổ điển của Knuth, được mô tả tại đây: http://stackoverflow.com/questions/1262480/how-to-shuffle-a-listt/1262521 – Guffa

1

Chỉ cần thêm một biến thể, bạn có thể tạo ra một phương pháp tĩnh rất đơn giản như thế này :

public static IEnumerable<int> RandomSequence(int minValue, int maxValue) 
    { 
     Random r = new Random(); 
     while (true) 
      yield return r.Next(minValue, maxValue); 
    } 

Và sau đó sử dụng nó như thi s:

var numbers = RandomSequence(-50, 50).Take(10)); 

    foreach(var number in numbers) 
     Console.WriteLine(number); 

Tôi yêu yield return ... hehe c",)

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