Как найти Vector3, который в массиве 0,0,0 - PullRequest
0 голосов
/ 01 декабря 2018

Этот код работает:

/* create empty list */
Vector3[] vertices = new Vector3[50];
/* add only one element */
vertices[0] = new Vector3(0, 1, 2);

/* test with non-null vectors */
Vector3 test = new Vector3(4, 5, 6);
Vector3 test2 = new Vector3(0, 1, 2);
Vector3 found = Array.Find(vertices, x => x == test);
if (found != Vector3.zero) {
    Debug.Log("OK");
} else {
    Debug.Log("Not found");
}
Vector3 found2 = Array.Find(vertices, x => x == test2);
if (found2!= Vector3.zero) {
    Debug.Log("OK");
} else {
    Debug.Log("Not found");
}

Меня раздражает, что он всегда возвращает что-то, , даже если элемент не найден .Когда элемент не найден, он возвращает Vector3.zero.

Мой вопрос таков: что, если вы хотите иметь Vector3.zero в массиве (что на самом деле является моим случаем)?Как вы справляетесь с этим?

1 Ответ

0 голосов
/ 01 декабря 2018

Ваша проблема в том, что Array.Find<T> определено для возврата default(T), когда ничего не найдено.Поскольку T в этом случае является структурой, а структуры являются типами значений, default(T) не может быть нулевым, но по умолчанию для этой структуры, что равно Vector3.zero.Таким образом, вы не сможете различить успешно найденное Vector3.zero и отсутствие совпадения.

Array.IndexOf(array, value) вернет индекс первого элемента, равный value или -1никто не найденЭто должно работать просто отлично для вас.Если результат не -1, вы можете использовать этот результат, чтобы получить соответствующий элемент из вашего массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...