Выбор элементов из набора без повторений
Добавлено: 16 ноя 2017, 16:55
Привет всем! Нужно Выбор элементов из набора без повторений, то есть нужно чтоб из массива цифр { 1, 3,5,7,9} при срабатывании функции выбирались случайные значения { 3, 1,9,7,5} например, а не { 1, 3,1,7,1} чтоб не повторялись. Как это реализовать. Вот нашёл Инструкцию (вроде к этой теме относится), но так и не понял как правильно выводить значения. https://docs.unity3d.com/ru/530/Manual/ ... mbers.html. Вот мой вариант кода но не рабочий потому что выводит { 1, 3,5,7,9} а не случайно
public int[] spawnPoints; // { 1, 3,5,7,9}
public int X=5; //число элементов которые нужно вывести
void Start()
{
ChooseSet(X);
}
int[] ChooseSet (int numRequired) {
int[] result = new int[numRequired];
int numToChoose = numRequired;
for (int numLeft = spawnPoints.Length; numLeft > 0; numLeft--) {
float prob = (float)numToChoose/(float)numLeft;
if (Random.value <= prob) {
numToChoose--;
result[numToChoose] = spawnPoints[numLeft - 1];
if (numToChoose == 0) {
break;
}
}
}
print(result[0] + " Random");
print(result[1] + " Random");
print(result[2] + " Random");
print(result[3] + " Random");
print(result[4] + " Random");
return result;
}
}
Синтаксис:
Используется csharp
public int[] spawnPoints; // { 1, 3,5,7,9}
public int X=5; //число элементов которые нужно вывести
void Start()
{
ChooseSet(X);
}
int[] ChooseSet (int numRequired) {
int[] result = new int[numRequired];
int numToChoose = numRequired;
for (int numLeft = spawnPoints.Length; numLeft > 0; numLeft--) {
float prob = (float)numToChoose/(float)numLeft;
if (Random.value <= prob) {
numToChoose--;
result[numToChoose] = spawnPoints[numLeft - 1];
if (numToChoose == 0) {
break;
}
}
}
print(result[0] + " Random");
print(result[1] + " Random");
print(result[2] + " Random");
print(result[3] + " Random");
print(result[4] + " Random");
return result;
}
}