• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

  • Автор темы Автор темы 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

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

Да и 3й параметр у Вас НЕПРАВИЛЬНЫЙ
Replace(newarray, oldarray, "") - 3й должен быть полуюбому вариант, хотябы так
Код:
Dim f(0)
F(0) = ""
Replace(newarray, oldarray, f)
 
Ещё бы проверить, что быстрее: самописная или ArrayReplace....
 
На собаках есть такая функция: @Keywords(list1;list2). Она определяет какие значения совпадают в 2 списках. Соответственно, все остальные значения списка 2 не содержаться в списке 1.
 
<!--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 не по глазам оказался :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 элементов массивами, поэтому скорость не важна особо.
 
<!--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
 
<!--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
 
это косячная функция.. когда массив имеет индекс близкий к пределу или забит данными подзавязку, то можно с легкостью получить ошибку при выполнении оной функции.. ;(
 
Для: 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]
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы