Tôi muốn tạo một mảng có số 144 từ 1-> 36 theo thứ tự ngẫu nhiên (do đó, mỗi số được lặp lại 4 lần). Chúng ta có thể sử dụng Enumerable.Repeat và Enumerable.Range để làm điều đó. Nếu có hơn xin vui lòng giải thích cho tôi như thế nào?Tạo và lặp lại số trong C#
Trả lời
Vâng, tạo chuỗi với tất cả các số trong rất dễ dàng:
var items = from x in Enumerable.Range(1, 36)
from y in Enumerable.Repeat(x, 4)
select y;
Sau đó, bạn chỉ có thể sử dụng ToArray
để có được nó vào một mảng và xào bài. Có rất nhiều câu hỏi về việc xáo trộn một mảng trong C# trên SO, chẳng hạn như this one. Bạn có thể sử dụng mã đó trực tiếp, hoặc gọi ToArray
và trộn các mảng vào vị trí mà không cần sử dụng nó ở cuối.
int[] numbers = Enumerable.Range(0, 144).Select(i => (i % 36)+1).OrderBy(g => Guid.NewGuid()).ToArray();
Có lẽ không quan trọng trong trường hợp này, nhưng cách xáo trộn này kết thúc là O (n log n), nơi nó chỉ cần là O (n). –
// Generate the list (not in random order)
var one_to_36 = Enumerable.Range(1, 36);
var lst = one_to_36.Concat(one_to_36).Concat(one_to_36).Concat(one_to_36).ToList();
// Randomize the list by swapping random elements
Random rnd = new Random();
for(int i = 0; i < lst.Count; i++)
{
int i1 = rnd.Next(lst.Count);
int i2 = rnd.Next(lst.Count);
int tmp = lst[i1];
lst[i1] = lst[i2];
lst[i2] = tmp;
}
Việc hoán đổi các phần tử ngẫu nhiên theo cách này không tạo ra sự phân phối ngẫu nhiên tốt - có cách tốt hơn để xáo trộn một tập hợp, như được liên kết trong câu trả lời của tôi. –
Tôi đã không nhận ra rằng ... cảm ơn cho tip –
var seq = Enumerable.Range(0, 144);
var all = seq.ToList();
var random = new Random();
var result = seq.Select(i => {
var index = random.Next()%all.Count;
var r = all[index] % 36 + 1; all.RemoveAt(index);
return r;
}).ToList();
- 1. Tạo mã đối tượng lặp lại C++
- 2. Lấy số lần một mục được lặp lại trong C#
- 3. Django: tạo truy vấn SQL thô, chuyển nhiều tham số lặp lại/lặp lại?
- 4. Xóa các vòng lặp và điều kiện mã hóa lặp đi lặp lại trong C#
- 5. Tiếp tục lặp lại trong C++ cho đến khi một số lặp cụ thể trong gdb
- 6. nhã Xử lý lặp đi lặp lại Mã số tài sản trong C#
- 7. Số ngẫu nhiên không lặp đi lặp lại trong numpy
- 8. Lặp lại đối tượng JSON trong C#
- 9. Số lần lặp lại trong python?
- 10. android - tạo số ngẫu nhiên không có lặp lại
- 11. Lặp lại số nguyên [] trong PL/pgSQL
- 12. Lặp lại trong LaTeX
- 13. Lặp lại hình ảnh trong C#
- 14. sprintf - đối số lặp lại
- 15. Lặp lại qua các chữ số bằng số nguyên trong C
- 16. Pointers và lặp trong C
- 17. Tạo tam giác Sierpinski lặp lại trong Mathematica?
- 18. Ruby: Lặp lại các hằng số
- 19. C# Generics để tránh lặp lại mã?
- 20. Lặp lại ngẫu nhiên trong vòng lặp
- 21. Các số ngẫu nhiên giống nhau lặp lại vòng lặp
- 22. tính số lần lặp lại của ký tự trong chuỗi trong C#
- 23. Lặp lại qua mảng 2 chiều C#
- 24. Các tham số kiểu Scala lặp lại
- 25. Xác định chuỗi các số lặp lại trong R
- 26. Lặp lại vector STL 2 chiều C++
- 27. HashSet Lặp lại trong khi xóa các mục trong C#
- 28. Cách nhận tổng số lần lặp lại trong một foreach
- 29. Cách tạo số duy nhất không lặp lại trong thời gian hợp lý?
- 30. Lặp lại cùng một mã HTML trong một số trang
hey, đó là dễ đọc hơn so Giải pháp của tôi. +1 –
và thanh lịch hơn nhiều Concat của tôi;) –
cảm ơn cho nhận xét, nhưng bây giờ tôi cần phải điền vào mảng tạo ra một mảng [9,16], bạn có thể đề xuất một cách tốt cho tôi? –