eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingTablica int i usuwanie duplikatówRe: Tablica int i usuwanie duplikatów
  • Data: 2015-09-18 22:50:00
    Temat: Re: Tablica int i usuwanie duplikatów
    Od: szemrany <s...@o...off> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    On Fri, 18 Sep 2015 21:36:40 +0200, bartekltg wrote:

    >> Tak, tylko, że Delphi miało inne założenia produkcyjne i nie ma milionów
    >
    > Założenia miało te same. A nawet bardziej nastawione na biblioteki,
    > bo było to tzw RAD. Miałeś szbyko budować aplikacje z klocków,
    > nie pisać własny standardowy kontener.

    Specjalnie nie napisałem założenia projektowe tylko produkcyjne, choć może
    to też nieszczęśliwe słowo. Chodziło mi o to, że Delphi służy głównie do
    pisania aplikacji bazodanowych z GUI, a nie wysoko wydajnych aplikacji do
    przetwarzania danych.
    Te klocki o których piszesz są na wyższym poziomie niż struktury danych i
    algorytmy, to moduły typu system raportów, warstwa DAL, kontrolki wizualne
    itd.

    > > nie ma milionów
    >> kontenerów jak C++. Muszę część rzeczy wydłubać sam.
    >
    > Po prostu nie wierzę.

    Kilka lat temu znany tu Sebastian Biały wpadł na sąsiednią grupę delphi, bo
    coś zrobić w Delphi musiał i pytał m.in. o hash table. Gdy się dowiedział,
    że nie ma to dostał nomen omen białej gorączki i zbluzgał zarówno samo
    Delphi jak i kilka postronnych osób ;-) Fakt, że pytał o Delphi 5, które
    było z poprzedniego wieku. Teraz dodano kilka kontenerów, ale to jest
    dosłownie KILKA.

    > Tak, pascal jest mentalnie związany z uczeniem programowania,
    > i każdy nowy programista koniecnzie musi pisać własnego
    > qsorta i drzewo AVL, ale to szybko przechodzi, a jeśli
    > język jest więcej niż parę osób używany komenrcyjnie (a Delphi
    > jak mówisz, nadal jest, a jakis czas temu było bardzo poważnie
    > używane), na pewno biblioteki są.

    Mało, malutko, jeszcze mniej... bo 90% delphiarzy nie potrzebuje. Bo i po
    co? Żeby robić szybką listę buttonów na formie czy ...szybko czekać na
    odpowiedź serwera SQL? ;-)

    > Zresztą, sam w poprzednim poście znalazłeś TDictionary,
    > odpowiednik mapy, i to w wersja która wygląda na szablonową.
    > Pewnie obok jest i zwykły zbiór, i tablica hashuhjąca.
    > TDictionary wystarczy.

    TDictionary<K, V> jest od 2009 roku w standardzie, jest generyczne (czy to
    odpowiednik szablonów to nie wiem, jest podobne do tego co ma C#:
    http://interactiveasp.net/blogs/spgilmore/archive/20
    09/12/23/using-generics-in-delphi.aspx
    ).
    Obok, rzeczywiście, jest jeszcze kilka:
    TList<T> - oparty o array of T
    TThreadList<T> - to samo tylko thread safe
    TQueue<T> - oparte o array of T
    TThreadedQueue<T> - j.w. thread safe
    TStack<T> - oparte o array of T

    oraz starsze:
    THashedStringList - lista typu key-value, gdzie hash jest liczony w ten
    sposób:

    function TStringHash.HashOf(const Key: string): Cardinal;
    var
    I: Integer;
    begin
    Result := 0;
    for I := 0 to Key.Length - 1 do
    Result := ((Result shl 2) or (Result shr (SizeOf(Result) * 8 - 2))) xor
    Ord(Key.Chars[I]);
    end;

    nie potrafię ocenić ile to warte.

    TBucketList - hash lista na pointery oparta o array of array of pointer,
    gdzie pierwsza tablica zawiera kubełki zbudowane przez proste przesunięcie
    bitów w prawo, a druga zawiera już wartości dla konkretnego kubełka.

    I to WSZYSTKO w standardzie.
    Uwierzysz, że nia ma nawet prostej linked listy? Wszak to ją się pisze na 3
    zajęciach z programowania, także kiedyś w pascalu. Nie wiem dlaczego tak
    jest, ale widać rynek tego nie potrzebował.

    Są co prawda fajne zewnętrzne projekty, a jeden z nich się rozwija od lat
    poważnie i wygląda na to, że już nie padnie, jest nim Spring for Delphi:

    https://bitbucket.org/sglienke/spring4d

    ale jeszcze nie zdążyłem go produkcyjnie użyć, bo już raz się wpakowałem w
    tego typu projekt, który potem zdechł i miałem dużo kłopotu z wymiksowaniem
    się z niego. Teraz dmucham na zimne.

    >> Nie chcę używać dziesiątek obcych bibliotek, bo to co teraz robię pakuję do
    >> swojego frejmworka do użycia także w przyszłości, więc nie chcę mieć zbyt
    >> wielu ogonów.
    >
    > Przejdź na ciemną stronę.
    > C++, java, nawet python.
    > Mniej czasu poświeceisz na nowy język niż na pokonywanie
    > takich problemów. ;]

    Gdybym zaczynał od zera to pewnie tak bym zrobił, ale mam mnóstwo
    pracującego kodu już w Delphi i przy nim zostaję.
    Poza tym C++, Java i Python odpadają, bo ja potrzebuję w dużej mierze pisać
    aplikację okienkowe pod Windows, a żaden z nich nie jest konkurencyjny w
    tym aspekcie dla Delphi. Zerkam na C# i czekam co będzie teraz z
    Microsoftem i jego nowymi pomysłami. Otwarcie źródeł .NETa jest dobrym
    początkiem:
    https://github.com/Microsoft/dotnet

    >> Stąd potrzebuję algorytmów niskopoziomowych, które sobie w tymże module
    >> zaimplementuję. Jeśli okaże się, że użycie TDictionary da jakiś zysk na
    >
    > Przecież ni o tym pisałem.
    > Wewnętrz algorytmu wyznaczajacego duplikaty używasz dołego
    > TDictionary tak, jak w praktycznie wszystkich opisanych tu
    > sposobach.
    >
    >> dużych tablicach względem algorytmu naiwnego z pętlami to tej wersji też
    >> będę używał.
    >
    > Da. A jeszcze szybsze byłoby zrobienie kopii i sortowanie ;-)

    Taką wersję też mam w roadmapie ;-)

    --
    howgh
    szemrany
    "Trzeba z żywymi naprzód iść, po życie sięgać nowe,
    a nie w uwiędłych laurów liść z uporem stroić głowę"

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: