2013-02-15 11 views
5

Mi chiedevo se c'era un modo per creare un set di record in pascal. Sto cercando su Internet e credo che questo sia impossibile.set di record in pascal

type  
    TRecord = record 
    StrField: string; 
    IntField: Integer; 
    end; 

    TSetOfRecord = set of TRecord;   
+1

Il tipo di base di un set in pascal è ordinale. –

+0

Chiediti quanto sarebbe grande un insieme di tutte le possibili stringhe. –

risposta

5

Sì, è impossibile che i membri dell'insieme debbano essere di tipo ordinale. Per quanto mi ricordi, puoi avere solo un numero limitato di membri, 255 suona un campanello.

Sembra essere molto più combinazioni di quella nel tuo record, anche se non è chiaro cosa definisce l'unicità per un membro.

+1

Il 256 è un limite di implementazione, anche se comune. –

+1

Ancora usa molto nel codice delphi legacy, è una descrizione spesso più ordinata del genere di cose che faresti con enum flags. Sono rimasto un po 'deluso dai ragazzi di C# quando non l'hanno fatto. –

1

'Set di record' non ha senso. Immagino tu intenda "raccolta di record". In questo caso, puoi implementarlo in più modi.

Quello che consiglierei sarebbe utilizzare "open array" (non lo stesso di "array dinamici").

Avresti bisogno di scrivere un paio di le routine, uno è questo:

function RecordInCollection(const ARecord: TYourRecord; const ACollection: array of TYourRecord): Boolean; 
var 
    Index1: Integer; 
begin 
    Result := False; 
    for Index1 := Low(ACollection) to High(ACollection) do begin 
    Result := (ACollection[Index1].StrField = ARecord.StrField) and (ACollection[Index1].IntField = ARecord.IntField); 
    if Result then Exit; 
    end; 
end; 

e chiamare in questo modo:

RecordInCollection (Record1, [Record2, RECORD3, Record4])

oppure è possibile utilizzare array costanti pre-dichiarati anziché [Record2, Record3, Record4].

+1

Set di record ha senso. Come nella raccolta non ordinata e non cifrata di membri unici. –

Problemi correlati