AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen Alle Foren als gelesen markieren

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 23.11.2010, 10:43   #21  
gl00mie ist offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3.684 / 5813 (201) ++++++++++
Registriert seit: 28.11.2005
Ort: Москва
Blog-Einträge: 3
да здравствует коллективный разум! Пожалуй, после всех оптимизаций алгоритм получился достаточно простой для того, чтобы даже не выносить его в отдельный метод тогда и от промежуточного списка можно избавиться...

PS. Можно разве что перед получением второго множества отличающихся значений проверять, что первое множество отличающихся значений не пустое.

Geändert von gl00mie (23.11.2010 um 10:47 Uhr)
Alt 23.11.2010, 15:46   #22  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Что-то задело меня.
Можно еще чуть пооптимизировать
X++:
{
...
    seedSet = Set::difference( newSet, oldSet ); // зародыши: новые значения будут браться отсюда
    if( seedSet.empty() )
        return ret; // не на что менять - поэтому ничего менять не нужно (gl00mie)

    deadSet = Set::difference( oldSet, newSet ); // мертвенькие: они исчезнут
    seedEnum = seedSet.getEnumerator();
    deadEnum = deadSet.getEnumerator();
    while ( deadEnum.moveNext() )
    {
        if ( !seedEnum.moveNext() )
            break; // чтобы не бегать в цикле лишний раз, если в зародышах ничего не осталось

        ret.addEnd([deadEnum.current(), seedEnum.current()]);
    }
    return ret;
}
__________________
полезное на axForum, github, vk, coub.
Alt 23.11.2010, 18:26   #23  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
X++:
{
...
    seedSet = Set::difference( newSet, oldSet ); // зародыши: новые значения будут браться отсюда
    if( seedSet.empty() )
        return ret; // не на что менять - поэтому ничего менять не нужно (gl00mie)

    deadSet = Set::difference( oldSet, newSet ); // мертвенькие: они исчезнут

    seedEnum = seedSet.getEnumerator();
    deadEnum = deadSet.getEnumerator();
    while ( deadEnum.moveNext() && seedEnum.moveNext() )
    {
        ret.addEnd([deadEnum.current(), seedEnum.current()]);
    }
    return ret;
}
Вот теперь - хорошо.
__________________
полезное на axForum, github, vk, coub.
Alt 24.11.2010, 15:05   #24  
Wamr ist offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1.737 / 868 (32) +++++++
Registriert seit: 15.01.2002
Ort: Москва
Blog-Einträge: 7
вариант
парадоксально простой алгоритм получается, если пытаться сохранить сортировку старых элементов.
X++:
    ret = new List( Types::Container );

    setIterOld = new SetIterator( _setOfValues2Replace );
    setIterNew = new SetIterator( _setOfNewValues );

    while (setIterNew.more() && setIterOld.more())
    {
        if (setIterOld.value() > setIterNew.value())
        {
            ret.addEnd( [ setIterOld.value(), setIterNew.value() ] );
        }
        else if (setIterOld.value() < setIterNew.value())
        {
            ret.addStart( [ setIterOld.value(), setIterNew.value() ] );
        }

        setIterNew.next();
        setIterOld.next();
    }

    return ret;
This post has been rated by: mazzy (5), gl00mie (5).
Stichworte
законченный пример, уникальность

 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Универсальный изменятель значений полей wojzeh DAX: Программирование 17 26.09.2013 17:47
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 09:09 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.