поиск индекса в массиве по значению с несколькими повторными значениями - PullRequest
0 голосов
/ 16 февраля 2019

у меня есть такой код

dim pos, arr, val
arr = Array("a", "b", "c", "d")
val = "b"

pos = Application.Match(val, arr, False)
If Not IsError(pos) Then
MsgBox pos
End If

это прекрасно работает

за исключением того, что теперь мне нужно сделать что-то более сложное, что если у меня есть массив, такой как

arr = Array("a", "b", "b", "b","c","c","d")

и я хочу вернуть индексы для всех вхождений этого значения в массиве.

Я знаю, что вы можете использовать isinarray, но это просто скажет вам, если значение существует, мне нужно знать, какие индексы вмассив содержит указанное значение.

Есть ли способ сделать это без циклического прохождения по всему массиву?

1 Ответ

0 голосов
/ 22 марта 2019

Вы должны сделать функцию, которая содержит два цикла (например, for) и сохранить в другом массиве (indexes) позиции, которые должны быть возвращены.Вероятно, это выглядит так: псевдокод:

function(int[] getIndexes -> { char[] array, char value }) 
    int indexes_found -> 0

    // Supposing that the array position starts at zero. 
    // This is to know the size of idexes array.
    for(int array_pos -> 0, array_pos < sizeof(array), array_pos -> array_pos + 1)

        if(value isEqualsTo array[array_pos])
            indexes_found -> indexes_found + 1
        end(if)
    end(for)

    // The array to be returned will have a size of idexes_found value.
    int[idexes_found] indexes

    // This is to get the next position in indexes array.
    // Remember, size ofindexes is less than or equals to size of array
    int index_pos -> 0

    for(int array_pos -> 0, array_pos < sizeof(array), array_pos -> array_pos + 1)
        if(value isEqualsTo array[array_pos])
            idexes[index_pos] -> array_pos
            index_pos -> index_pos + 1
        end(if)
    end(for)

    return idexes
end(function)

Пример ввода / вывода:

Вход:

char[5] letters -> { 'a', 'b', 'c', 'a', 'b' }
char value -> 'b'

int[] indexes -> getIndexes(letters, value)

Выход:

indexes -> { 1, 4 }

Надеждапомочь вам.

Привет.

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