• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

про массив

  • Автор темы 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:
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

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