![]() |
ID erstellen/berechnen
hi,
ich brauche eine größere Anzahl (1000-5000) eindeutige IDentifikations-Nummern. Zusätzlich soll aus jeder beliebigen Kombination dieser ID-Nummern wiederum eine eindeutige ID entstehen, die diese Kombination kennzeichnet. Im Prinzip entspricht dieses Verhalten genau dem von (Windows-)Flags (z.B. die Dateiattribut-Flags) allerdings basieren diese Flags auf den 2er Potenzen und ist somit eigentlich nur für kleinere Mengen (~50) geeignet, da 2^1000 doch ziemlich groß ist :roll: Ich hoffe das jemand von euch eine passende Idee hat, wie man dieses Problem elegant lösen kann. |
Re: ID erstellen/berechnen
Zitat:
Zitat:
Zitat:
kannst du näher schildern um was es überhaupt geht |
Re: ID erstellen/berechnen
5000 Bits sind noch kein Problem, denke ich. Nimm einfach einen Bitvektor z.B. Classes.TBits (D7)
|
Re: ID erstellen/berechnen
Hallo xineohp,
wenn es was mit Datenbanken zu tun hat, kannst Du ftAutoInc nutzen, wenn nicht mußt Du Dir den letzt verwendeten Wert merken. Int64 sollte für die meisten Datenmengen ausreichen zur eindeutigen Identifizierung. Im schlimmsten Fall kannst Du aus ID1 und ID2 eine Zeichenkette mit konstanter Länge bilden und diese hintereinandersetzen. Sollte auch etwas eineindeutiges ergeben. Programmiervorschläge kann ich erst machen, wenn ich weiß worum es geht. mfg eddy |
Re: ID erstellen/berechnen
Hi,
du kannst auch deine ID per CoCreateGuid erzeugen. Dann hast du GUIDs, was die Wahrscheinlichkeit einer Redundanz ziemlich unrealistisch macht. ;) |
Re: ID erstellen/berechnen
hm,
hätte nicht gedacht, dass ich so schwer zu verstehen bin ... aber egal, ich werde noch mal verdeutlichen was ich meine: angenommen ich habe fünf verschiedene Dateien, denen ich jeweils eine eindeutige ID zuordne:
Code:
Dann kann ich aus jeder beliebigen Kombination (das scheinen einige überlesen zu haben :gruebel:) wiederum eine eindeutige ID errechnen:
Datei 1: ID1 = 1 = 2^0
Datei 2: ID2 = 2 = 2^1 Datei 3: ID3 = 4 = 2^2 Datei 4: ID4 = 8 = 2^3 Datei 5: ID5 = 16 = 2^4 Datei 1 & Datei 2 & Datei 3: ID = ID1 + ID2 + ID3 = 1 + 2 + 4 = 7 (Diese ID kann ausschließlich durch diese eine Kombination erzielt werden!) Datei 1 & Datei 3 & Datei 5: ID = ID1 + ID3 + ID5 = 1 + 4 + 16 = 21 Datei 3 & Datei 5 & Datei 1: ID = ID3 + ID5 + ID1 = 4 + 16 + 1 = 21 (Die Reihenfolge spielt dabei keine Rolle) Und dies ist genau das Prinzip, nachdem die diversen Windowsflags funktionieren. Allerdings funktioniert dieses Prinzip nur bei kleineren ID-Anzahlen, da die Potenzen von Zwei sehr schnell sehr groß werden. Die einzige Antwort, die auch nur im entferntesten passt ist die von marabu, allerdings kann ich mir nicht vorstellen, wie ich das umsetzen könnte. Ich wäre für ein Beispiel dankbar. |
Re: ID erstellen/berechnen
Wenn du für 5000 verschiedene Attribute alle möglichen Kombinationen eindeutig in einer ID speichern willst, bist du mit Integer o.ä. Typen komplett verloren, denn dafür muss du 2^5000 verschiedene IDs erzeugen können, und das ist ne Menge. Es bleibt dir also nix anderes übrig, als eine Klasse zu schreiben, wo du nicht deine ID direkt speicherst, sondern eben jedes einzelne Bit getrennt. Als Bit-Typ kannst du z.B. Boolean nehmen. Die einzelnen Bits kannst du in einem dynamischen array speichern.
Dann musst du wohl auch noch AND und OR in der Klasse einbauen. Das sollte aber nicht das Problem sein, da dir ja jedes einzelne Bit in einer getrennten Variable vorliegt. |
Re: ID erstellen/berechnen
Zitat:
Delphi-Quellcode:
uses
Classes; var bits: TBits; begin bits.size := 5000; // wieviele bits willst du verwalten? bits[n] := true; // bit einschalten bits[n] := false; // bit ausschalten if bits[n] then {} else {}; end; |
Re: ID erstellen/berechnen
hm,
@Jelly genau das(eine extra Klasse) wollte ich eigentlich vermeiden, da ich dann meine IDs erzeugen und freigeben müsste und zusätzlich das Kopieren auch nicht so trivial ist, da ich mich in verschiedenen Threads bewege. Ich glaube ich entscheide mich für eine billig Lösung: Die primären IDs sind einfach Zahlen von 1 bis 5000 und die Kombinationen identifiziere ich, indem ich die enthltenen ID der Größe nach sortiert in einen String schreibe. @marabu Vielen Dank. Allerdings ist tBits auch eine Klasse, womit die obengenannten Probleme auftreten. |
Re: ID erstellen/berechnen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz