Vlastní funkce na TStringList sort (D7) – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vlastní funkce na TStringList sort (D7) – Delphi – Fórum – Programujte.comVlastní funkce na TStringList sort (D7) – Delphi – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
oxidián0
Grafoman
15. 4. 2020   #1
-
0
-

Mohl by mi někdo poradit jak na D7 uspořádat 2-3 seznamy typu TStringList aby byla zachována relace mezi seznamy?? Jedna se o toto:

var otazky,odpovedi,cisla_otazek TString;
begin
otazky := TStringList.create;
odpovedi := TStringList.create;
cisla_otazek := TStringList.create;
otazky.add('B?'); otazky.add('C?'); otazky.add('A?');
odpovedi.add('b)'); odpovedi.add('c)'); odpovedi.add('a)');
cisla_otazek.add('0'); cisla_otazek.add('1'); cisla_otazek.add('2');
end;

cisla_otazek odpovídají indexům v pořadí jak otázky a odpovědi byly načteny ze souboru... Otázky jsou zprvu neuspořádané, což je zprvu žádoucí... Ukládám si tedy čísla těch otázek, abych věděl zda uživatel odpověděl správně nebo špatně. Když ale chci uspořádat otazky, nemohu použít funkci sort.

Potřebuji funkci, která mi uspořádá pole odpovedi abecedně vzestupně, ale stejným způsobem uspořádá i otázky a cisla_otazek - tzn. že porovnávat se má podle odpovedi. Když se tedy odpovedi posune o jedna dolu, musí se dolů posunout i otazky a cisla_otazek. Dá se toto provést?

Nahlásit jako SPAM
IP: 89.176.180.–
MilanL+1
Grafoman
16. 4. 2020   #2
-
0
-

#1 oxidián
jsi tu dlouho nebyl :)

no tvůj problém je, že sorty běží nezávisle jen na daném listu, máš několik možností:

- vlastní sort nejspíš jako samostatná funkce, když to chceš aplikovat na několik listů

- 2 pole na mapu indexů otázek a odpovědí, čísla mít na konci stringů a po seřazení regenerovat odpovídající mapu indexů

- vlastní record nebo třída obdobná slovníku (otázka, odpověď, číslo) a opět nutno vytvořit vlastní sort funkci

Nahlásit jako SPAM
IP: 185.112.167.–
MilanL+1
Grafoman
16. 4. 2020   #3
-
0
-

popřípadě by mohlo být shůdným řešením využití možnosti TStringListu s párováním key=value

Nahlásit jako SPAM
IP: 185.112.167.–
Řešení
oxidián0
Grafoman
16. 4. 2020   #4
-
0
-
Vyřešeno Nejlepší odpověď

Problém už mám vyřešený, nasměrovali mě na stackoverflow, díky.

Nahlásit jako SPAM
IP: 89.176.180.–
oxidián0
Grafoman
16. 4. 2020   #5
-
0
-

Dlouho jsem tu nebyl protože jsem dva roky nepracoval na projektu výuky hebrejštiny a minulý rok jsem se zabýval jinými věcmi jako lexikony a zpracování audia (myslím že jsem tu na to téma založil otázku a nikdo s tím neporadil). Mě šlo o dekódování audio sample a takové věci. No a teď zrovna řeším toto:

V D7 mi to hlásí chybu jak se so TStringList mistakes snažím přidat nový záznam, do kterého chci následně přičítat znaky. mistakes2D[i].wrong_answers_current_arr obsahuje byty v hodnotě od 0 do 223, většinou se hodnota pohybuje kolem 0 až 15 nebo 0 až 25 podle toho kolik je v souboru slovíček.

procedure zkompletovat_mistakes;
var s: string;
    i,n: integer;
begin
  mistakes.clear;
  for i := 0 to length(mistakes2D)-1 do
    begin
    mistakes.add('');// every wrong answer must be tracked wrong within a question record
    for n := 0 to length(mistakes2D[i].wrong_answers_current_arr)-1 do
      begin
        mistakes[i] := '"';// mistakes[i]+chr(mistakes2D[i].wrong_answers_current_arr[n]+32);
      end;
    setlength(mistakes2D[i].wrong_answers_current_arr, 0);
    end;
end;

Ta chyba je Raised exception class EStringListError .... Operation not allowed on sorted list.

Nevím o tom, že by ten list byl řazený. A nechápu proč to teda nejde nebo jak to tam mám dostat. Ale možná na to raději udělám normální pole místo listu.

Nahlásit jako SPAM
IP: 89.176.180.–
gna
~ Anonymní uživatel
1884 příspěvků
16. 4. 2020   #6
-
0
-

Řazený list nejspíš nejde měnit, protože by se tím narušilo řazení. Mělo by to jít vypnout nastavenim .Sorted na False.

Taky si nejsem jistý, jestli automaticky roste, tj. jestli po .clear můžeš přidávat pomocí [i].

Nahlásit jako SPAM
IP: 213.211.51.–
gna
~ Anonymní uživatel
1884 příspěvků
16. 4. 2020   #7
-
0
-

Aha, ještě je tam před tím .add, takže to indexování je OK.

Nahlásit jako SPAM
IP: 213.211.51.–
oxidián0
Grafoman
16. 4. 2020   #8
-
0
-

Ty jo tak to mě vůbec nenapadlo, že by tam mohla být tahle vlastnost, když to není formulář.Tak jsem použil

mistakes.sorted := false;

a už to chybu nedělá. Ale já si nikdy nevšiml, že by se ty seznamy řadili. U TListBox jo když to zapnu.

Nahlásit jako SPAM
IP: 89.176.180.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

Podobná vlákna

Vlastní funkce — založil nestor

Buble sort a select sort — založil Rasťo

Buble-sort — založil xy3000

Selection sort — založil Pavel

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý