Zliczanie wystąpień każdej wartości z ListBox

0

Mam w listbox dane np.

123
444
3
555
2
333
4
3
3
2

Chodzi mi teraz o zliczenie wystąpień, każdej wartości. Czyli powinno być:

1 razy wystąpiło 4
1 razy wystąpiło 123
1 razy wystąpiło 333
1 razy wystąpiło 444
1 razy wystąpiło 555
2 razy wystąpiło 2
3 razy wystąpiło 3

Do tej pory zliczałem to w ten sposób, że w jednym pliku usuwałem duplikaty i pętlą sprawdzałem wartości w drugim pliku. Jak to zliczyć w łatwy sposób ? Dodam, że nie znam wartości w listbox, gdybym je znał to byłoby to łatwo zliczyć

0

w każdym normalnym języku (w tym w nowszych delphi) masz mapę gdzie możesz sobie wrzucić jako klucz liczbę, a jako wartość liczbę wystąpień - w ten sposób wystarczy pętlą przelecieć po rekordach i dodawać wartość w odpowiednim kluczu

w przypadku delphi7 (zabytek) nie ma czegoś takiego, więc musiałbyś sobie utworzyć to samemu
w najprostszym przypadku będą to dwie tablice gdzie w pierwszej będziesz trzymał klucze a w drugiej wartości

przeleć pętlą po elementach i szukaj w pierwszej tablicy tego elementu - jeżeli znajdziesz to pod identycznym indeksem w drugiej tablicy zwiększ wartość - jeżeli nie to dodaj do pierwszej tablicy element a do drugiej na tym samym indeksie dodaj "1"

albo po prostu odpuść sobie delphi7 bo to naprawdę zabytek i jeśli nie robisz tego w pracy w jakimś archaicznym projekcie to polecam przejście na C#

0

Posortuj, wyjdzie ci:
2
2
3
3
3
4
123
333
444
555
dalej chyba oczywiste.

2

Ja bym to zrobił tak, jak pokazałem poniżej. Pisane na szybko, ale raczej działa ok. Tylko, że jeżeli się upierasz przy identycznej prezentacji wyników, jak pokazałeś. To trzeba pokombinować z sortowaniem. Ale to już pozostawiam Tobie.

//...

function SortByIntegerAscending(List : TStringList; Index1, Index2 : integer) : integer;
var
  I1, I2 : integer;
begin
  I1 := Integer(TObject(List.Objects[Index1]));
  I2 := Integer(TObject(List.Objects[Index2]));
  if I1 < I2 then
    Result := -1
  else
    if I1 > I2 then
      Result := 1
    else
      Result := AnsiCompareText(List[Index1], List[Index2]);
end;

procedure TForm1.Button1Click(Sender : TObject);
var
  S : string;
  I, Cnt, Idx : integer;
  CntSL, TempsL : TStringList;
begin
  TempsL := TStringList.Create;
  CntsL := TStringList.Create;
  TempSL.Assign(ListBox1.Items);
  for I := 0 to TempSL.Count - 1 do
  begin
    S := TempSL[I];
    Idx := CntSL.IndexOf(S);
    if Idx = -1 then
    begin
      CntSL.AddObject(S, TOBject(Integer(1)));
    end
    else
    begin
      Cnt := Integer(CntSL.Objects[Idx]);
      CntSL.Objects[Idx] := TOBject(Integer(Cnt + 1));
    end;
  end;
  TempSL.Free;
  CntSL.CustomSort(@SortByIntegerAscending);
  S := '';
  for I := 0 to CntSL.Count - 1 do
  begin
    Cnt := Integer(CntSL.Objects[I]);
    S := S + Format('%d razy wystapiło %s', [Cnt, CntSL[I]]) + #13#10;
  end;
  CntSL.Free;
  if S <> '' then
  begin
    ShowMessage(S);
  end;
end;

EDIT: Dragon mnie ubiegł. Oczywiście mój kod jest uniwersalny jeżeli by się nagle okazało, jak to często tutaj bywa. Że danymi wejściowymi mogą być też teksty w ListBoxie.

A i jak wiadomo IndexOf, działa bez rozróżniania case. Jeżeli chcesz to zmienić, to napisz sobie funkcję po swojemu na bazie jej źródel. Z VCL/LCL na przykład.

0

Kod Olesio działa super. Dziękuję. Pokombinuję jeszcze

0

Olesio wymyśliłem coś szybszego i prostszego, gdyż twój kod zlicza przy większej ilości w nieskończoność to zapewne przez indexof. Gdy lista jest posortowana wówczas stosuje to radzi sobie z milionami linii w krótkim czasie oczywiście zamiast listbox jest TStringList.

var
i, ii, a, b : integer;
s1, s2 : string;
sl, sl1 : TStringList;
begin
sl := TStringList.Create;
sl1 := TStringList.Create;

ListBox1.Items.Insert(0,'');

for i := ListBox1.Items.Count -1 downto 1 do
begin
 s1 := ListBox1.Items[i];
 s2 := ListBox1.Items[i-1];

 if s1 = s2 then inc(a);
 if s1 = s2  then sl.Text := inttostr(a+1)+' razy wystąpiło '+ListBox1.Items[i];
 if s1 <> s2 then sl.Text := inttostr(a+1)+' razy wystąpiło '+ListBox1.Items[i];

 if s1 <> s2 then a := 0;
 if s1 <> s2 then sl1.Add(sl[sl.Count-1]);

 if i = 1 then break;

 application.ProcessMessages;
end;

  sl1.Sorted := True;

  Showmessage(sl1.Text);

  sl.free;
  sl1.free;
end;
0

Pokaż mi przykład danych w ListBozie dla których się robi niby nieskończona pętla. Ale zrobiłeś po swojemu, to ok. Następnym razem nie będę się narzucać. Zrobiłem kod dla testowych danych. Działał ok, pomijając dopracowanie sortowania.

I poczytaj jak działa funkcja IndexOf. Jej kod masz w źródlach VCL. Wątpie by ona powodowała problem, bo jest prawidłowo obsłużona w moim przykładzie. Natomiast jakim cudem może być nieskończoność? Skoro wyraźnie masz u mnie pętle for I := 0 to TempSL.Count - 1 do?

0
olesio napisał(a):

Pokaż mi przykład danych w ListBozie dla których się robi niby nieskończona pętla. ...
"Działa w nieskończoność" - polecam - http://sjp.pl/hiperbola Podałeś algorytm O(N*N) przy "... z milionami linii ..." - wiadomo że trochę trzeba poczekać.

0

Srsly, Delphi nie ma czegoś takiego jak HashMap? o_O Bo google mówi że istnieje coś takiego jak TDictionary... a wy tu jakiś turbo hardkor robicie. Czemu nie zrobić zwykłego zliczania z użyciem mapy?

for liczba x in lista:
  if (x nie ma w mapie):
    mapa[x] = 0;
  mapa[x] = mapa[x]+1;

i voila i czas średni O(n)...

0

Kod powyższy zamieszczony przeze mnie działa doskonale. Problem rozwiązany

0
Shalom napisał(a):

Srsly, Delphi nie ma czegoś takiego jak HashMap? o_O Bo google mówi że istnieje coś takiego jak TDictionary... a wy tu jakiś turbo hardkor robicie. Czemu nie zrobić zwykłego zliczania z użyciem mapy?

mają nowsze wersje
delphi 7 któremu już wychodzi prokurator z majtek jeszcze tego nie ma

0

To wyliczenie sum Lotto w parę sekund a kodem Olesia około 10 min, a przy współczynniku odchylenia standardowego około 8 h a mi w parę sekund. :)

1 razy wystąpiło powtórzenie wartości statystycznej 21,0000
1 razy wystąpiło powtórzenie wartości statystycznej 22,0000
1 razy wystąpiło powtórzenie wartości statystycznej 278,0000
1 razy wystąpiło powtórzenie wartości statystycznej 279,0000
2 razy wystąpiło powtórzenie wartości statystycznej 23,0000
2 razy wystąpiło powtórzenie wartości statystycznej 277,0000
3 razy wystąpiło powtórzenie wartości statystycznej 24,0000
3 razy wystąpiło powtórzenie wartości statystycznej 276,0000
5 razy wystąpiło powtórzenie wartości statystycznej 25,0000
5 razy wystąpiło powtórzenie wartości statystycznej 275,0000
7 razy wystąpiło powtórzenie wartości statystycznej 26,0000
7 razy wystąpiło powtórzenie wartości statystycznej 274,0000
11 razy wystąpiło powtórzenie wartości statystycznej 27,0000
11 razy wystąpiło powtórzenie wartości statystycznej 273,0000
14 razy wystąpiło powtórzenie wartości statystycznej 272,0000
14 razy wystąpiło powtórzenie wartości statystycznej 28,0000
20 razy wystąpiło powtórzenie wartości statystycznej 271,0000
20 razy wystąpiło powtórzenie wartości statystycznej 29,0000
26 razy wystąpiło powtórzenie wartości statystycznej 270,0000
26 razy wystąpiło powtórzenie wartości statystycznej 30,0000
35 razy wystąpiło powtórzenie wartości statystycznej 269,0000
35 razy wystąpiło powtórzenie wartości statystycznej 31,0000
44 razy wystąpiło powtórzenie wartości statystycznej 268,0000
44 razy wystąpiło powtórzenie wartości statystycznej 32,0000
58 razy wystąpiło powtórzenie wartości statystycznej 267,0000
58 razy wystąpiło powtórzenie wartości statystycznej 33,0000
71 razy wystąpiło powtórzenie wartości statystycznej 266,0000
71 razy wystąpiło powtórzenie wartości statystycznej 34,0000
90 razy wystąpiło powtórzenie wartości statystycznej 265,0000
90 razy wystąpiło powtórzenie wartości statystycznej 35,0000
110 razy wystąpiło powtórzenie wartości statystycznej 264,0000
110 razy wystąpiło powtórzenie wartości statystycznej 36,0000
136 razy wystąpiło powtórzenie wartości statystycznej 263,0000
136 razy wystąpiło powtórzenie wartości statystycznej 37,0000
163 razy wystąpiło powtórzenie wartości statystycznej 262,0000
163 razy wystąpiło powtórzenie wartości statystycznej 38,0000
199 razy wystąpiło powtórzenie wartości statystycznej 261,0000
199 razy wystąpiło powtórzenie wartości statystycznej 39,0000
235 razy wystąpiło powtórzenie wartości statystycznej 260,0000
235 razy wystąpiło powtórzenie wartości statystycznej 40,0000
282 razy wystąpiło powtórzenie wartości statystycznej 259,0000
282 razy wystąpiło powtórzenie wartości statystycznej 41,0000
331 razy wystąpiło powtórzenie wartości statystycznej 258,0000
331 razy wystąpiło powtórzenie wartości statystycznej 42,0000
391 razy wystąpiło powtórzenie wartości statystycznej 257,0000
391 razy wystąpiło powtórzenie wartości statystycznej 43,0000
454 razy wystąpiło powtórzenie wartości statystycznej 256,0000
454 razy wystąpiło powtórzenie wartości statystycznej 44,0000
532 razy wystąpiło powtórzenie wartości statystycznej 255,0000
532 razy wystąpiło powtórzenie wartości statystycznej 45,0000
612 razy wystąpiło powtórzenie wartości statystycznej 254,0000
612 razy wystąpiło powtórzenie wartości statystycznej 46,0000
709 razy wystąpiło powtórzenie wartości statystycznej 253,0000
709 razy wystąpiło powtórzenie wartości statystycznej 47,0000
811 razy wystąpiło powtórzenie wartości statystycznej 252,0000
811 razy wystąpiło powtórzenie wartości statystycznej 48,0000
931 razy wystąpiło powtórzenie wartości statystycznej 251,0000
931 razy wystąpiło powtórzenie wartości statystycznej 49,0000
1057 razy wystąpiło powtórzenie wartości statystycznej 250,0000
1057 razy wystąpiło powtórzenie wartości statystycznej 50,0000
1206 razy wystąpiło powtórzenie wartości statystycznej 249,0000
1206 razy wystąpiło powtórzenie wartości statystycznej 51,0000
1360 razy wystąpiło powtórzenie wartości statystycznej 248,0000
1360 razy wystąpiło powtórzenie wartości statystycznej 52,0000
1540 razy wystąpiło powtórzenie wartości statystycznej 247,0000
1540 razy wystąpiło powtórzenie wartości statystycznej 53,0000
1729 razy wystąpiło powtórzenie wartości statystycznej 246,0000
1729 razy wystąpiło powtórzenie wartości statystycznej 54,0000
1945 razy wystąpiło powtórzenie wartości statystycznej 245,0000
1945 razy wystąpiło powtórzenie wartości statystycznej 55,0000
2172 razy wystąpiło powtórzenie wartości statystycznej 244,0000
2172 razy wystąpiło powtórzenie wartości statystycznej 56,0000
2432 razy wystąpiło powtórzenie wartości statystycznej 243,0000
2432 razy wystąpiło powtórzenie wartości statystycznej 57,0000
2702 razy wystąpiło powtórzenie wartości statystycznej 242,0000
2702 razy wystąpiło powtórzenie wartości statystycznej 58,0000
3009 razy wystąpiło powtórzenie wartości statystycznej 241,0000
3009 razy wystąpiło powtórzenie wartości statystycznej 59,0000
3331 razy wystąpiło powtórzenie wartości statystycznej 240,0000
3331 razy wystąpiło powtórzenie wartości statystycznej 60,0000
3692 razy wystąpiło powtórzenie wartości statystycznej 239,0000
3692 razy wystąpiło powtórzenie wartości statystycznej 61,0000
4070 razy wystąpiło powtórzenie wartości statystycznej 238,0000
4070 razy wystąpiło powtórzenie wartości statystycznej 62,0000
4494 razy wystąpiło powtórzenie wartości statystycznej 237,0000
4494 razy wystąpiło powtórzenie wartości statystycznej 63,0000
4935 razy wystąpiło powtórzenie wartości statystycznej 236,0000
4935 razy wystąpiło powtórzenie wartości statystycznej 64,0000
5426 razy wystąpiło powtórzenie wartości statystycznej 235,0000
5426 razy wystąpiło powtórzenie wartości statystycznej 65,0000
5940 razy wystąpiło powtórzenie wartości statystycznej 234,0000
5940 razy wystąpiło powtórzenie wartości statystycznej 66,0000
6506 razy wystąpiło powtórzenie wartości statystycznej 233,0000
6506 razy wystąpiło powtórzenie wartości statystycznej 67,0000
7097 razy wystąpiło powtórzenie wartości statystycznej 232,0000
7097 razy wystąpiło powtórzenie wartości statystycznej 68,0000
7748 razy wystąpiło powtórzenie wartości statystycznej 231,0000
7748 razy wystąpiło powtórzenie wartości statystycznej 69,0000
8423 razy wystąpiło powtórzenie wartości statystycznej 230,0000
8423 razy wystąpiło powtórzenie wartości statystycznej 70,0000
9163 razy wystąpiło powtórzenie wartości statystycznej 229,0000
9163 razy wystąpiło powtórzenie wartości statystycznej 71,0000
9933 razy wystąpiło powtórzenie wartości statystycznej 228,0000
9933 razy wystąpiło powtórzenie wartości statystycznej 72,0000
10769 razy wystąpiło powtórzenie wartości statystycznej 227,0000
10769 razy wystąpiło powtórzenie wartości statystycznej 73,0000
11637 razy wystąpiło powtórzenie wartości statystycznej 226,0000
11637 razy wystąpiło powtórzenie wartości statystycznej 74,0000
12579 razy wystąpiło powtórzenie wartości statystycznej 225,0000
12579 razy wystąpiło powtórzenie wartości statystycznej 75,0000
13552 razy wystąpiło powtórzenie wartości statystycznej 224,0000
13552 razy wystąpiło powtórzenie wartości statystycznej 76,0000
14603 razy wystąpiło powtórzenie wartości statystycznej 223,0000
14603 razy wystąpiło powtórzenie wartości statystycznej 77,0000
15690 razy wystąpiło powtórzenie wartości statystycznej 222,0000
15690 razy wystąpiło powtórzenie wartości statystycznej 78,0000
16856 razy wystąpiło powtórzenie wartości statystycznej 221,0000
16856 razy wystąpiło powtórzenie wartości statystycznej 79,0000
18059 razy wystąpiło powtórzenie wartości statystycznej 220,0000
18059 razy wystąpiło powtórzenie wartości statystycznej 80,0000
19349 razy wystąpiło powtórzenie wartości statystycznej 219,0000
19349 razy wystąpiło powtórzenie wartości statystycznej 81,0000
20673 razy wystąpiło powtórzenie wartości statystycznej 218,0000
20673 razy wystąpiło powtórzenie wartości statystycznej 82,0000
22087 razy wystąpiło powtórzenie wartości statystycznej 217,0000
22087 razy wystąpiło powtórzenie wartości statystycznej 83,0000
23540 razy wystąpiło powtórzenie wartości statystycznej 216,0000
23540 razy wystąpiło powtórzenie wartości statystycznej 84,0000
25082 razy wystąpiło powtórzenie wartości statystycznej 215,0000
25082 razy wystąpiło powtórzenie wartości statystycznej 85,0000
26663 razy wystąpiło powtórzenie wartości statystycznej 214,0000
26663 razy wystąpiło powtórzenie wartości statystycznej 86,0000
28340 razy wystąpiło powtórzenie wartości statystycznej 213,0000
28340 razy wystąpiło powtórzenie wartości statystycznej 87,0000
30051 razy wystąpiło powtórzenie wartości statystycznej 212,0000
30051 razy wystąpiło powtórzenie wartości statystycznej 88,0000
31860 razy wystąpiło powtórzenie wartości statystycznej 211,0000
31860 razy wystąpiło powtórzenie wartości statystycznej 89,0000
33706 razy wystąpiło powtórzenie wartości statystycznej 210,0000
33706 razy wystąpiło powtórzenie wartości statystycznej 90,0000
35648 razy wystąpiło powtórzenie wartości statystycznej 209,0000
35648 razy wystąpiło powtórzenie wartości statystycznej 91,0000
37625 razy wystąpiło powtórzenie wartości statystycznej 208,0000
37625 razy wystąpiło powtórzenie wartości statystycznej 92,0000
39703 razy wystąpiło powtórzenie wartości statystycznej 207,0000
39703 razy wystąpiło powtórzenie wartości statystycznej 93,0000
41809 razy wystąpiło powtórzenie wartości statystycznej 206,0000
41809 razy wystąpiło powtórzenie wartości statystycznej 94,0000
44016 razy wystąpiło powtórzenie wartości statystycznej 205,0000
44016 razy wystąpiło powtórzenie wartości statystycznej 95,0000
46253 razy wystąpiło powtórzenie wartości statystycznej 204,0000
46253 razy wystąpiło powtórzenie wartości statystycznej 96,0000
48586 razy wystąpiło powtórzenie wartości statystycznej 203,0000
48586 razy wystąpiło powtórzenie wartości statystycznej 97,0000
50944 razy wystąpiło powtórzenie wartości statystycznej 202,0000
50944 razy wystąpiło powtórzenie wartości statystycznej 98,0000
53402 razy wystąpiło powtórzenie wartości statystycznej 201,0000
53402 razy wystąpiło powtórzenie wartości statystycznej 99,0000
55875 razy wystąpiło powtórzenie wartości statystycznej 100,0000
55875 razy wystąpiło powtórzenie wartości statystycznej 200,0000
58446 razy wystąpiło powtórzenie wartości statystycznej 101,0000
58446 razy wystąpiło powtórzenie wartości statystycznej 199,0000
61031 razy wystąpiło powtórzenie wartości statystycznej 102,0000
61031 razy wystąpiło powtórzenie wartości statystycznej 198,0000
63706 razy wystąpiło powtórzenie wartości statystycznej 103,0000
63706 razy wystąpiło powtórzenie wartości statystycznej 197,0000
66388 razy wystąpiło powtórzenie wartości statystycznej 104,0000
66388 razy wystąpiło powtórzenie wartości statystycznej 196,0000
69161 razy wystąpiło powtórzenie wartości statystycznej 105,0000
69161 razy wystąpiło powtórzenie wartości statystycznej 195,0000
71928 razy wystąpiło powtórzenie wartości statystycznej 106,0000
71928 razy wystąpiło powtórzenie wartości statystycznej 194,0000
74781 razy wystąpiło powtórzenie wartości statystycznej 107,0000
74781 razy wystąpiło powtórzenie wartości statystycznej 193,0000
77624 razy wystąpiło powtórzenie wartości statystycznej 108,0000
77624 razy wystąpiło powtórzenie wartości statystycznej 192,0000
80542 razy wystąpiło powtórzenie wartości statystycznej 109,0000
80542 razy wystąpiło powtórzenie wartości statystycznej 191,0000
83440 razy wystąpiło powtórzenie wartości statystycznej 110,0000
83440 razy wystąpiło powtórzenie wartości statystycznej 190,0000
86412 razy wystąpiło powtórzenie wartości statystycznej 111,0000
86412 razy wystąpiło powtórzenie wartości statystycznej 189,0000
89348 razy wystąpiło powtórzenie wartości statystycznej 112,0000
89348 razy wystąpiło powtórzenie wartości statystycznej 188,0000
92350 razy wystąpiło powtórzenie wartości statystycznej 113,0000
92350 razy wystąpiło powtórzenie wartości statystycznej 187,0000
95311 razy wystąpiło powtórzenie wartości statystycznej 114,0000
95311 razy wystąpiło powtórzenie wartości statystycznej 186,0000
98324 razy wystąpiło powtórzenie wartości statystycznej 115,0000
98324 razy wystąpiło powtórzenie wartości statystycznej 185,0000
101285 razy wystąpiło powtórzenie wartości statystycznej 116,0000
101285 razy wystąpiło powtórzenie wartości statystycznej 184,0000
104295 razy wystąpiło powtórzenie wartości statystycznej 117,0000
104295 razy wystąpiło powtórzenie wartości statystycznej 183,0000
107235 razy wystąpiło powtórzenie wartości statystycznej 118,0000
107235 razy wystąpiło powtórzenie wartości statystycznej 182,0000
110215 razy wystąpiło powtórzenie wartości statystycznej 119,0000
110215 razy wystąpiło powtórzenie wartości statystycznej 181,0000
113119 razy wystąpiło powtórzenie wartości statystycznej 120,0000
113119 razy wystąpiło powtórzenie wartości statystycznej 180,0000
116048 razy wystąpiło powtórzenie wartości statystycznej 121,0000
116048 razy wystąpiło powtórzenie wartości statystycznej 179,0000
118889 razy wystąpiło powtórzenie wartości statystycznej 122,0000
118889 razy wystąpiło powtórzenie wartości statystycznej 178,0000
121751 razy wystąpiło powtórzenie wartości statystycznej 123,0000
121751 razy wystąpiło powtórzenie wartości statystycznej 177,0000
124507 razy wystąpiło powtórzenie wartości statystycznej 124,0000
124507 razy wystąpiło powtórzenie wartości statystycznej 176,0000
127274 razy wystąpiło powtórzenie wartości statystycznej 125,0000
127274 razy wystąpiło powtórzenie wartości statystycznej 175,0000
129930 razy wystąpiło powtórzenie wartości statystycznej 126,0000
129930 razy wystąpiło powtórzenie wartości statystycznej 174,0000
132581 razy wystąpiło powtórzenie wartości statystycznej 127,0000
132581 razy wystąpiło powtórzenie wartości statystycznej 173,0000
135109 razy wystąpiło powtórzenie wartości statystycznej 128,0000
135109 razy wystąpiło powtórzenie wartości statystycznej 172,0000
137629 razy wystąpiło powtórzenie wartości statystycznej 129,0000
137629 razy wystąpiło powtórzenie wartości statystycznej 171,0000
140008 razy wystąpiło powtórzenie wartości statystycznej 130,0000
140008 razy wystąpiło powtórzenie wartości statystycznej 170,0000
142370 razy wystąpiło powtórzenie wartości statystycznej 131,0000
142370 razy wystąpiło powtórzenie wartości statystycznej 169,0000
144587 razy wystąpiło powtórzenie wartości statystycznej 132,0000
144587 razy wystąpiło powtórzenie wartości statystycznej 168,0000
146771 razy wystąpiło powtórzenie wartości statystycznej 133,0000
146771 razy wystąpiło powtórzenie wartości statystycznej 167,0000
148800 razy wystąpiło powtórzenie wartości statystycznej 134,0000
148800 razy wystąpiło powtórzenie wartości statystycznej 166,0000
150794 razy wystąpiło powtórzenie wartości statystycznej 135,0000
150794 razy wystąpiło powtórzenie wartości statystycznej 165,0000
152617 razy wystąpiło powtórzenie wartości statystycznej 136,0000
152617 razy wystąpiło powtórzenie wartości statystycznej 164,0000
154397 razy wystąpiło powtórzenie wartości statystycznej 137,0000
154397 razy wystąpiło powtórzenie wartości statystycznej 163,0000
156004 razy wystąpiło powtórzenie wartości statystycznej 138,0000
156004 razy wystąpiło powtórzenie wartości statystycznej 162,0000
157554 razy wystąpiło powtórzenie wartości statystycznej 139,0000
157554 razy wystąpiło powtórzenie wartości statystycznej 161,0000
158923 razy wystąpiło powtórzenie wartości statystycznej 140,0000
158923 razy wystąpiło powtórzenie wartości statystycznej 160,0000
160236 razy wystąpiło powtórzenie wartości statystycznej 141,0000
160236 razy wystąpiło powtórzenie wartości statystycznej 159,0000
161354 razy wystąpiło powtórzenie wartości statystycznej 142,0000
161354 razy wystąpiło powtórzenie wartości statystycznej 158,0000
162410 razy wystąpiło powtórzenie wartości statystycznej 143,0000
162410 razy wystąpiło powtórzenie wartości statystycznej 157,0000
163273 razy wystąpiło powtórzenie wartości statystycznej 144,0000
163273 razy wystąpiło powtórzenie wartości statystycznej 156,0000
164062 razy wystąpiło powtórzenie wartości statystycznej 145,0000
164062 razy wystąpiło powtórzenie wartości statystycznej 155,0000
164654 razy wystąpiło powtórzenie wartości statystycznej 146,0000
164654 razy wystąpiło powtórzenie wartości statystycznej 154,0000
165176 razy wystąpiło powtórzenie wartości statystycznej 147,0000
165176 razy wystąpiło powtórzenie wartości statystycznej 153,0000
165490 razy wystąpiło powtórzenie wartości statystycznej 148,0000
165490 razy wystąpiło powtórzenie wartości statystycznej 152,0000
165732 razy wystąpiło powtórzenie wartości statystycznej 149,0000
165732 razy wystąpiło powtórzenie wartości statystycznej 151,0000
165772 razy wystąpiło powtórzenie wartości statystycznej 150,0000

dodanie znacznika <code> - furious programming

0

No nie twierdziłem, że mój kod jest idealny. Jednak robłem to pod testowy zestaw. Nie wiedziałem jak dużo będzie danych. Tutaj pewnie lepszy będzie kod Dragona. Ewentualnie wylosowane liczby trzeba przechowywać jako tablicę bajtów. Zaś do zliczenia powtórzen można użyć tablicy w zakresie losowanych liczb, które zsumujemy. Wedle mnie też powinno być szybciej. A wydłużenie mogło trwać ponieważ funkcja IndexOf to przecież tak na prawdę niestety kolejna pętla i sprawdzanie.

1

Wg mnie przy tak małym rozrzucie wynikowym trzeba w jednym przebiegu znaleźć min i max
Stworzyć odpowiednią tablicę Integerów: Tab:array of Integer; o rozmiarze max-min+1: SetLength(Tab,Max-Min+1.
W drugim przebiegu zastosować metodę zliczania: Inc(Tab[Values[X]-Min]);
Będzie nawet szybciej niż zaproponował @Shalom, owszem nadal O(n) tylko że z minimalnym nakładem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1