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

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

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

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

Эффективнен ли способ работы с массивами

  • Автор темы K-Fire
  • Дата начала
K

K-Fire

Есть простенькая задачка: 2 массива, старый и новый, надо найти элементы которые есть только в новом.
Попробовал использовать функцию Replace(newarray, oldarray, "") - лотус вылетает с красным экраном. Поэтому написал по-быстрому свою функцию:

Код:
Function isArrayConsistElement(array, element) 
Forall el In array
If el = element Then
isArrayConsistElement = True
Exit Function
End If
End Forall
isArrayConsistElement = False
End Function

Код:
Function ReturnNewElements(newarray, oldarray) As Variant
' declarations
Redim returnarray(0 To 0) As String
Dim i As Integer, k As Integer
' code
k = 0
For i=Lbound(newarray) To Ubound(newarray)
If Not isArrayConsistElement(oldarray, newarray(i)) Then
Redim Preserve returnarray(0 To k) As String
returnarray(k) = newarray(i)
k = k + 1
End If
Next
ReturnNewElements = returnarray
End Function

Можно ли предложить более простой и эффективный способ решить эту задачку?
 
M

morpheus

ArrayReplace ?

Да и 3й параметр у Вас НЕПРАВИЛЬНЫЙ
Replace(newarray, oldarray, "") - 3й должен быть полуюбому вариант, хотябы так
Код:
Dim f(0)
F(0) = ""
Replace(newarray, oldarray, f)
 
O

Omh

Ещё бы проверить, что быстрее: самописная или ArrayReplace....
 
G

Guest

На собаках есть такая функция: @Keywords(list1;list2). Она определяет какие значения совпадают в 2 списках. Соответственно, все остальные значения списка 2 не содержаться в списке 1.
 
M

morpheus

<!--QuoteBegin-Omh+3:12:2007, 11:00 -->
<span class="vbquote">(Omh @ 3:12:2007, 11:00 )</span><!--QuoteEBegin-->Ещё бы проверить, что быстрее: самописная или ArrayReplace....
[snapback]88044" rel="nofollow" target="_blank[/snapback]​
[/quote]
ну так можно запринтовать время и на больших массивах проверить - думаю не сложно
 
K

K-Fire

Блин, ArrayReplace не по глазам оказался :D

<!--QuoteBegin-Morpheus+3:12:2007, 10:59 -->
<span class="vbquote">(Morpheus @ 3:12:2007, 10:59 )</span><!--QuoteEBegin-->Replace(newarray, oldarray, "") - 3й должен быть полуюбому вариант, хотябы так
[snapback]88043" rel="nofollow" target="_blank[/snapback]​
[/quote]
Я конечно же пробовал и с таким параметром, падает всё равно.


<!--QuoteBegin-Omh+3:12:2007, 11:00 -->
<span class="vbquote">(Omh @ 3:12:2007, 11:00 )</span><!--QuoteEBegin-->Ещё бы проверить, что быстрее: самописная или ArrayReplace....
[snapback]88044" rel="nofollow" target="_blank[/snapback]​
[/quote]

Думаю проверять смысла нет, самописная должна быть медленее.
Однако ArrayReplace возвращает массив с пустыми элементами, и потом его всё равно как-то надо обрабатывать, либо Evaluate c @Trim делать, либо цикл с вычищением пустых элементов через промежуточный массив и Redim. А вот тут уже возможно разница будет небольшая.

Использовать эти функции я все равно не буду с большим чем 10-15 элементов массивами, поэтому скорость не важна особо.
 
O

Omh

<!--QuoteBegin-K-Fire+3:12:2007, 12:10 -->
<span class="vbquote">(K-Fire @ 3:12:2007, 12:10 )</span><!--QuoteEBegin-->Однако ArrayReplace возвращает массив с пустыми элементами, и потом его всё равно как-то надо обрабатывать
[snapback]88049" rel="nofollow" target="_blank[/snapback]​
[/quote]
Fulltrim
 
M

morpheus

<!--QuoteBegin-K-Fire+3:12:2007, 11:10 -->
<span class="vbquote">(K-Fire @ 3:12:2007, 11:10 )</span><!--QuoteEBegin-->Evaluate c @Trim
[snapback]88049" rel="nofollow" target="_blank[/snapback]​
[/quote]

LOTUSSCRIPT LANGUAGE

FullTrim function
 
K

Kee_Keekkenen

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

morpheus

Для: Kee_Keekkenen
Можливо. Но афтар написал <!--QuoteBegin-K-Fire+3:12:2007, 11:10 -->
<span class="vbquote">(K-Fire @ 3:12:2007, 11:10 )</span><!--QuoteEBegin-->Использовать эти функции я все равно не буду с большим чем 10-15 элементов массивами
[snapback]88049" rel="nofollow" target="_blank[/snapback]​
[/quote]
 
Мы в соцсетях:

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