• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

про массив

  • Автор темы oxystile
  • Дата начала
Статус
Закрыто для дальнейших ответов.
O

oxystile

Добрый!
есть ли функция, которая определит сколько раз определенное значение встречается в массиве
(или только обычный перебор пожет это выяснить)?
 
M

morpheus

можно зделать так
например
Код:
dim arr(5) as string
Dim v as Variant
Dim result as INteger
arr = "1":"2":"3":"2":"7"

v = implode ( arr )
v = Split( v, "2" )
result = Ubound(arr) - UBound( v )

могут быть ошибки, писал прям тут
 
O

oxystile

спасибо! указанный пример работает:)
у меня result = UBound( v )
 
M

morpheus

oxystile
подождите не внедряйте, есть маленький изьян

Код:
dim arr(5) as string
Dim v as Variant
Dim result as INteger
arr = "1":"2":"3":"2":"7"
dim s as string
s = "$$#"
v = s & implode ( arr, s ) & s 
v = Split( v, s & "2" & s )
result = UBound( v )

при таком варианте не будет ошибок с массивом "1":"2":"3":"2":"72":"7" - тут результат повторений был бы 3, а на самом деле тут 2 повторения
 
O

oxystile

v = Split( v, s & "2" & s ) если с моими значениями, то так v = Split( v, s & list1(i) & s ) и тут ошибка "String is too large"
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Имхо, проще перебрать в цикле. Универсально(работает не только для строк) и просто.

Вот еще один способ. Вроде ничем не быстрее цикла:
(Len(Join(array)) - Len(Join(Arrayreplace(array, symbol, "")))) / Len(symbol)
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Если это массив строк, то можно достаточно просто получить число повторов каждого элемента.

Хотя, можно иметь массив любого типа.

Тут проверил.
Код вида:
Код:
Dim l List As Long
Dim i As Long
For i = Lbound(arr) To Ubound(arr)
l(arr(i)) = l(arr(i)) + 1
Next
В три раза быстрее этого:
Код:
Dim i As Long
Dim c As Long
For i = Lbound(arr) To Ubound(arr)
If arr(i) = symbol Then c = c + 1
Next

Я поражен. :rolleyes:
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!