У меня есть функция, тело которой выглядит примерно так:
if (contains(array, element1) > -1){
// do something
} else if (contains(array, element2) > -1) {
// do something
} else if (contains(array, element3) > -1) {
// do someting
}...
Функция contains
перебирает мой массив и проверяет, содержит ли он element
, который я передаю емуи вернуть либо свою позицию, если она существует, либо -1, если ее нет.
В моей части // do something
мне нужна позиция этого элемента в массиве.Я могу сделать это несколькими способами:
- Я могу вызвать мою функцию
contains()
еще раз, чтобы получить позицию. Я могу определить несколько переменных, которые определены как возвращение функции содержимого, и затем проверить их в моем блоке if-else.Так что-то вроде:
int element1Loc = contains(array, element1);
int element2Loc = contains(array, element2);
int element3Loc = contains(array, element3);
if (element1Loc > -1){
// do something
} else if (element2Loc > -1) {
// do something
} else if (element3Loc > -1) {
// do someting
}...
Возможно, я могу изменить contain
, чтобы он возвращал int array[2]
, с array[0]
равным 0
или 1
независимо от того, является ли элементв ней или нет, и тогда array[1]
q будет равно фактическому местоположению, делая код таким:
if (contains(array, element1)[0] > -1){
// do something
} else if (contains(array, element2)[0] > -1) {
// do something
} else if (contains(array, element3)[0] > -1) {
// do something
}...
- Я могу сказать, прикрутить блок if-else, сохранив возврат
contains
в переменной и запустить несколько операторов if.
Первое решение будет искать в моем массиве как минимум дважды.Второе решение будет искать по крайней мере столько раз, сколько элементов я ищу.Решение 3, возможно, лучшее, но, возможно, не самое элегантное.Решение 4 будет запускать каждый оператор if ...
Каков наилучший способ поиска только один раз?Должен ли я сделать функцию, которая принимает все, что я ищу, и возвращает массив с позицией каждого элемента?Я обдумываю это?