-
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
atman.pl!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-01.news.neost
rada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
From: szemrany <s...@o...off>
Subject: Re: Tablica int i usuwanie duplikatów
Newsgroups: pl.comp.programming
User-Agent: 40tude_Dialog/2.0.15.84
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Sender: n...@p...no
References: <q1dqtorkbx55$.vtwhsmj03gkt$.dlg@40tude.net>
<mtav82$r76$1@node2.news.atman.pl>
<a...@n...v.pl>
<mtbd2l$9d5$1@node2.news.atman.pl>
<5...@g...com>
<mtbvi8$1ro$1@node1.news.atman.pl> <mtc22e$4hh$1@node1.news.atman.pl>
<mtc3ip$vok$1@node2.news.atman.pl> <mtc56n$7m6$1@node1.news.atman.pl>
<b...@g...com>
<mtcaik$d1l$1@node1.news.atman.pl> <mtckeb$nhk$1@node1.news.atman.pl>
<mtcmsn$j1k$1@node2.news.atman.pl> <mtcq5e$tdl$1@node1.news.atman.pl>
<1...@g...com>
<mtfe8g$7cu$1@node2.news.atman.pl>
<a...@g...com>
<1...@4...net>
<mthm8f$p6g$1@node1.news.atman.pl>
<1...@4...net>
<mthp48$epf$1@node2.news.atman.pl>
Date: Fri, 18 Sep 2015 22:50:00 +0200
Message-ID: <1amtzmln34a1o$.kdovd8ebh5p5$.dlg@40tude.net>
Lines: 127
Organization: Telekomunikacja Polska
NNTP-Posting-Host: 89-71-60-55.dynamic.chello.pl
X-Trace: 1442609400 unt-rea-a-02.news.neostrada.pl 27516 89.71.60.55:1508
X-Complaints-To: a...@n...neostrada.pl
Xref: news-archive.icm.edu.pl pl.comp.programming:208354
[ ukryj 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ę"
Następne wpisy z tego wątku
- 19.09.15 03:08 bartekltg
- 19.09.15 11:34 szemrany
- 19.09.15 13:35 M.M.
- 19.09.15 13:57 M.M.
- 19.09.15 14:43 szemrany
- 19.09.15 14:50 M.M.
- 19.09.15 15:08 szemrany
- 19.09.15 15:23 M.M.
- 19.09.15 15:44 szemrany
- 19.09.15 18:10 bartekltg
- 19.09.15 18:13 bartekltg
- 19.09.15 18:20 bartekltg
- 19.09.15 18:58 M.M.
- 19.09.15 20:44 bartekltg
- 19.09.15 20:45 slawek
Najnowsze wątki z tej grupy
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-12-01 Rambo 2024. Co z radio-stopem
- 2024-12-01 Pijani kierowcy
- 2024-12-01 "Chciałem zamówić kurs tym"
- 2024-11-30 Windykatorzy ścigają spadkobierców z mandat nieboszczyka za przekroczenie prędkości???
- 2024-11-30 Łódź => Technical Artist <=
- 2024-11-30 Lublin => Inżynier Serwisu Sprzętu Medycznego <=
- 2024-11-30 Warszawa => Microsoft Dynamics 365 Business Central Developer <=
- 2024-11-30 Bieruń => Team Lead / Tribe Lead FrontEnd <=
- 2024-11-30 Zielona Góra => Senior PHP Symfony Developer <=
- 2024-11-30 Gdańsk => Specjalista ds. Sprzedaży <=
- 2024-11-30 Lublin => Spedytor międzynarodowy <=
- 2024-11-30 Warszawa => Mid IT Recruiter <=
- 2024-11-30 Warszawa => Fullstack Developer <=
- 2024-11-30 Żerniki => Dyspozytor Międzynarodowy <=
- 2024-11-30 Warszawa => System Architect (background deweloperski w Java) <=