Newsgroup: it.comp.lang.delphi
Titolo: Aaaaarray Aaaaaiuto!

Salve a tutti! :)
Mi serve di creare un array dinamico che per ogni elemento possa contenere
sia un integer A ed una stringa B associata a questo integer. Poi devo
ordinare l'array in ordine crescente agendo su A (l'integer). Non so se mi
sono spiegato...esempio in pseudo codice:
  IlMioArray : array of ??????? (bo non so come dichiararlo);
.......
  SetLength(IlMioArray , 1);
  IlMioArray [0](A) := 200;
  IlMioArray [0](B) := 'una parola';
  SetLength(IlMioArray , 2);
  IlMioArray [1](A) := 100;
  IlMioArray [1](B) := 'una seconda parola';
  SetLength(IlMioArray , 3);
  IlMioArray [2](A) := 3;
  IlMioArray [2](B) := 'una terza parola';
IlMioArray := Ordina(IlMioArray);
e adesso IlMioArray appare ordinato cosi
  IlMioArray [0](A) e' uguale a 3;
  IlMioArray [0](B) e' uguale a  'una terza parola';
  IlMioArray [1](A) e' uguale a  100;
  IlMioArray [1](B) e' uguale a  'una seconda parola';
  IlMioArray [2](A) e' uguale a 200;
  IlMioArray [2](B) e' uguale a  'una parola';
Spero di essere stato chiaro...sinceramente mi sono completamente incasinato
e l'help di delphi (ah io ho il 4) non mi ha aiutato molto.
Grazie a tutti

 sono spiegato...esempio in pseudo codice:
Non so se è la miglior soluzione, comunque per non complicarmi troppo la
vita,
userei un TList e un tipo record:
type myType = record
           ItemStringa : string;
           ItemInteger : integer;
end;
e
Var myList : TList;
e, in una procedura (o dove ti pare)
Var myPointer : ^myType;
begin
  myList := TList.Create;
  New(myPointer);
  myPointer.ItemInteger := 3;
  myPointer.ItemString  := 'una terza parola';
  myList.Add(myPointer);
  New(myPointer);
  myPointer.ItemInteger := 100;
  myPointer.ItemString   := 'una seconda parola';
  myList.Add(myPointer);
e così via; mi pare inoltre che la TList implementi già una funzione di
sorting, controlla comunque sull'help di Delphi.
P.S. Ricordati di deallocare la memoria allocata con i New...
Bye

 sorting, controlla comunque sull'help di Delphi.
Ciao grazie per la risposta e per il codice che hai scritto che mi e' di
aiuto a capire..
Si la TList ha la sort...guarda sull'help che c'e' scritto:
"Performs a QuickSort on the list based on the comparison function Compare.
type TListSortCompare = function (Item1, Item2: Pointer): Integer;
procedure Sort(Compare: TListSortCompare);
Description
Call Sort to sort the items in the Items array. Compare is a comparison
function that indicates how the items are to be ordered. Compare returns < 0
if Item1 is less and Item2, 0 if they are equal and > 0 if Item1 is greater
than Item2."
Ammetto d'esser una gran sega a programmare pero che CAVOLO VUOL DIRE? La
TListSortCompare che deve fare?
Ho cercato sul net e non ho trovato altro che  questa pagina
http://www.borland.co.jp/qanda/delphi/d0009394.html
 in giapponese che pero'
dal codice FORSE mi fa intuire che si dovrebbe fare cosi...pero' ho provato
ad integrare con il tuo codice...ma apriti cielo...sbaglio qualcosa...
Se hai altri 2 minuti...ti ringrazio...

Vuol dire che devi implementare una funzione che abbia questo
prototipo:
 function (Item1, Item2: Pointer): Integer;
Questa deve ritornare un intero <0 se.... (come scritto nell'help).
Supponiamo che tu chiami la tua funzione ORDINA,
devi chiamarla in questo modo:
MiaLista.Sort(ORDINA);
Ciao, Rocco.


Ok, questo l'avevo capito...ma quello che trovo oscuro e' che diavolo gli
devo passare come Item1 e Item2...
Ho una tlist con dentro dei record che voglio ordinare in modo crescente,
usando uno dei due elementi dei record che e' un integer (spiegavo questo
nei messaggi precedenti). Da dove li pesco sti Item1 e Item2?
Grazie ancora

devo passare come Item1 e Item2...
Item1 e Item2  ti vengono passati dall'algoritmo di Sort presente
nella TList. Questi sono due puntatori agli elementi della tua TList,
quindi Item1 punta (nel tuo caso) ad un record (e quindi
dereferenziando il puntatore puoi accedere a qualsiasi campo del tuo
record).
Ciao, Rocco