2009-03-05 11 views
2

Ich bin auf der Suche nach einer Möglichkeit, eine (ziemlich) eindeutige (nicht automatisch inkrementierende) 4-stellige Zeichenfolge mit den Zahlen 0 - 9 für jede Ziffer mit C# zu generieren. Ich kann die Eindeutigkeit validieren und eine andere Nummer generieren, wenn ein Dup gefunden wird. Ich hatte darüber nachgedacht, die Nummer irgendwie auf die Ticks-Eigenschaft des DateTime-Objekts zu legen, aber es fällt mir schwer, die Teile zusammenzufügen.So generieren Sie eine eindeutige 4-stellige Zeichenfolge

Alle Gedanken oder Know-how würden sehr geschätzt werden.

Antwort

9

Wenn es sich nicht erhöht, wie wird es beim zweiten Mal einzigartig sein?

Sie sagen, dass Sie eine zufällige 4-stellige Zeichenfolge aus der Menge aller möglichen nicht verwendeten 4-stelligen Zeichenfolgen generieren möchten?

Wenn dies der Fall ist, besteht die korrekte Methode normalerweise darin, alle möglichen vierstelligen Strings zu generieren und sie in zufälliger Reihenfolge zu mischen. Dann nehmen Sie sie in der Reihenfolge, wie Sie neue brauchen.

CLARIFICATION: Andere Antworten schlagen vor, einfach eine zufällige 4-stellige Zeichenfolge zu generieren und es dabei belassen. Vermutlich würden Sie dann prüfen, ob es bereits verwendet wurde, und ein anderes erzeugen, wenn es verwendet wird. Dies hat das Potenzial einer extrem suboptimalen Leistung. Angenommen, Sie haben bereits 9.999 (alle bis auf eine) der möglichen vierstelligen Zeichenfolgen von 0000 bis 9999 verwendet. Um die letzte zu generieren, kann diese Methode viele, viele Versuche erfordern.

+0

Idealerweise hätte ich gerne einen weltweit einzigartigen Wert. Das Problem ist, dass ich eine sehr kurze Anzahl von Ziffern (z. B. 4 oder 5) möchte, die nur numerische Werte zwischen 0 - 9 verwenden. Ich hätte gerne etwas GUID-ähnliches, weil ich für eine geringe Wahrscheinlichkeit von Kollisionen fotografiere. – goombaloon

+0

@unknown: Nun, die Wahrscheinlichkeit einer Kollision ist 1/10000 (am Anfang) und wird nur schlimmer, wenn Sie IDs verbrauchen. Schließlich haben Sie eine sehr hohe Wahrscheinlichkeit für eine Kollision, und dann haben Sie keine IDs mehr. –

+0

Wenn Kollisionen in Ordnung sind, dann erzeuge die gesamte Liste von 10.000 Werten, mische sie und fange an, sie auszugeben. Bis Sie alle 10.000 aufgebraucht haben, wird jeder einen einzigartigen haben. Wenn du am Ende angelangt bist, fang wieder von vorne an und die neuen haben eine Kollision; usw. – mquander

-1

Erzeugen Sie vier Zufallszahlen von 0-9, und führen Sie dann eine Verkettung mit ihnen durch.

-3
Random randomNumberGenerator = new Random(); 
return string.Concat(
    randomNumberGenerator.Next(0, 9), 
    randomNumberGenerator.Next(0, 9), 
    randomNumberGenerator.Next(0, 9), 
    randomNumberGenerator.Next(0, 9)); 
1

ein Array aller 10000 Werte erstellen, die kurze Art verwenden und shuffle es dann.

+0

Dies wurde als Antwort auf ein anderes Problem auf dieser Website vorgeschlagen. Es ist ein guter Vorschlag. Erstellen Sie eine Tabelle mit Zahlen in zufälliger Reihenfolge und jedes Mal, wenn Sie eine neue zufällige Zeichenfolge benötigen, wählen Sie eine aus der Tabelle und löschen Sie sie. –

0

Hängt von Ihren Anforderungen ab. Wie viele davon erwarten Sie zu generieren? Wenn Sie nur ein paar hundert benötigen, können Sie eine Zufallszahl von 0 bis 9999 generieren. Wenn Sie alle 10.000 davon generieren möchten, sollten Sie nur etwas tun, wie Earwicker sagte, und eine Liste aller nicht verwendeten Werte verwalten.

Ich würde vorschlagen, dass Sie mit dem einfachsten Algorithmus beginnen (wählen Sie eine Zufallszahl von 1 bis 9999), und verwenden Sie es, bis es zu langsam ist. Dann geh zurück und setze Earwickers ein.

Verwandte Themen