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

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

K-Fire

Гость
#1
Есть простенькая задачка: 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
Можно ли предложить более простой и эффективный способ решить эту задачку?
 

morpheus

скриптописец
07.08.2006
3 915
1
34
Украина, Киев
#2
ArrayReplace ?

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

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

morpheus

скриптописец
07.08.2006
3 915
1
34
Украина, Киев
#5
<!--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

Гость
#6
Блин, 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 элементов массивами, поэтому скорость не важна особо.
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
37
Латвиджа, Рига
#7
<!--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
 

morpheus

скриптописец
07.08.2006
3 915
1
34
Украина, Киев
#8
<!--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

Well-Known Member
05.09.2006
639
6
Москва
#9
это косячная функция.. когда массив имеет индекс близкий к пределу или забит данными подзавязку, то можно с легкостью получить ошибку при выполнении оной функции.. ;(
 

morpheus

скриптописец
07.08.2006
3 915
1
34
Украина, Киев
#10
Для: 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]