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

Тема в разделе "Lotus - Программирование", создана пользователем K-Fire, 3 дек 2007.

  1. K-Fire

    K-Fire Гость

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

    Код (Text):
    Function isArrayConsistElement(array, element)
    Forall el In array
    If el = element Then
    isArrayConsistElement = True
    Exit Function
    End If
    End Forall
    isArrayConsistElement = False
    End Function
    Код (Text):
    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
    Можно ли предложить более простой и эффективный способ решить эту задачку?
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    ArrayReplace ?

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

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Ещё бы проверить, что быстрее: самописная или ArrayReplace....
     
  4. Гость

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

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    <!--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]
    ну так можно запринтовать время и на больших массивах проверить - думаю не сложно
     
  6. K-Fire

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

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    <!--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
     
  8. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    <!--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
     
  9. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    это косячная функция.. когда массив имеет индекс близкий к пределу или забит данными подзавязку, то можно с легкостью получить ошибку при выполнении оной функции.. ;(
     
  10. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: 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]
     
Загрузка...

Поделиться этой страницей