Um den index eines Elementes der Warteschlange c#
Habe ich eine Warteschlange von Benutzern(string E-Mails) eine in c# und ich möchte zu senden der Benutzer seine Position in dieser Warteschlange.
etwas wie ;
Queue q = new Queue(32);
q.Enqueue(Session["email"].ToString());
queue.IndexOf(email);
Irgendwelche Ideen?
Dank
InformationsquelleAutor baaroz | 2012-03-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht ein
List
oder eineArray
wäre besser für solche Aktionen, aber Sie könnten versuchen, diese:In der Tat, aber die Warteschlange ist nicht bieten eine Schnittstelle für die Rücksendung der index, so ist dies eine Kompromiss-Lösung
Ich bin ok mit, aber das muss einen zweiten Gedanken, wenn möglich
Ich Stimme mit @AdrianIftode weil während diesem allen steht in einer einzigen Zeile code dauert es ein paar von O(n) Operationen. Nicht effizient, aber effektiv
dies ist schöne Lösung ,die ich selbst unterrichtete, zu verwenden .ToArray kopieren der Warteschlange und dann durchläuft das array mit Schleife. das ist aber viel eleganter
InformationsquelleAutor ionden
Können Sie mit extension-Methode, so etwas wie:
InformationsquelleAutor Kirill Polishchuk
Warteschlange ist nicht die richtige Art zu verwenden, IndexOf, suchen Liste
Was ich meine ist, dass wenn Sie eine Sammlung, für die Sie brauchen, zu wissen, die position des Elements in der Auflistung, dann Warteschlange ist die falsche Wahl. @ionden beantwortet, wie es zu tun, ist der richtige Weg, aber..
InformationsquelleAutor Adrian Iftode
Leider kann man nicht direkt verwenden, die gute alte .NET
Queue
Objekt. Warteschlange für "blind" first-in-first-out-Logik, so dass Sie nicht ausführen können, alles andere als das.Wenn Sie wirklich brauchen, um zu implementieren eine queue, in die Sie nach Elementen suchen und abrufen Ihrer position (eine sehr nützliche Sache) versuchen Sie, wickeln Sie alles in einer Klasse bietet die folgenden Methoden an:
Für eine bessere Leistung (queue und dequeue in O(1) während indexOf O(n)) sollten Sie eine doppelt-verkettete Liste
InformationsquelleAutor usr-local-ΕΨΗΕΛΩΝ
wenn Sie möchten, dass der Benutzer nun, wie viele Elemente behins seinem element, einfach wieder die aktuelle queue .Count-Eigenschaft, nachdem Sie seine Elemente. Wenn Sie drücken Sie eine elemtn, wird die Anzahl erhöht. Wenn ein element aufgetaucht, die Zählung wird verringert.
InformationsquelleAutor JotaBe
Verwenden Sie die
Queue
'sToArray()
Methode, um ein array in der Reihenfolge der Warteschlange, dann das Objekt finden, das Sie suchen. Es gibt eine gute chance, dass Sie nicht brauchen, um eine traditionelle Warteschlange für was auch immer Aufgabe, die Sie durchführen wenn.Etwas wie:
InformationsquelleAutor Arin Taylor
Da bist du enqueing der Benutzer, er wird immer die Letzte person in der Liste, was bedeutet, es entspricht
queue.Count
.Auch wenn Sie nicht sehen, irgendwas hier, dann gibt es wirklich nicht viel, was wir für Sie tun können. Sie müssen wählen Sie einen anderen Behälter geben. ionden, ist richtig.
List<T>
s kann verwendet werden, wie Warteschlangen sowieso.InformationsquelleAutor mpen