Итак, имея массив, скажем
string [] stats = new string[] {
"A", "B", "C", "a", "b", "c"
};
, мы хотим взять 3
штучных предметов. Мы можем сделать это с помощью Random
и Linq , например (при условии, что все предметы одинаково вероятны для взятия)
using System.Linq;
...
private static Random s_Random = new Random();
...
int soldiers = 3;
string[] random = stats
.OrderBy(item => s_Random.NextDouble()) // Random order (shuffle)
.Take(soldiers) // soldiers top items
.ToArray(); // materialized as an array
Редактировать: мы можем обернуть подпрограмму в метод:
private static Random s_Random = new Random();
private static T[] TakeRandom<T>(IEnumerable<T> source, int take) {
return source
.OrderBy(item => s_Random.NextDouble())
.Take(take)
.ToArray();
}
, а затем использовать ее:
string[] random = TakeRandom(stats, 3);