W języku C# używam kolekcji kolejki. Mogę łatwo zamawiać lub zamieniać w kolejkę. Okay, teraz chciałbym wstawić coś w środku kolejki lub na początku kolejki. Nie znajduję żadnej metody na zrobienie czegoś takiego. Co polecasz jako alternatywną kolekcję?Jak wstawić elementy do kolejki w C#
Odpowiedz
Kolejka, z definicji, jest czymś, do czego można tylko dodawać kolejki i usuwać kolejki. Jeśli chcesz wstawić w środku, chcesz pełną listę (prawdopodobnie LinkedList<T>
), a nie Queue
.
To znaczy, nie próbujcie "wkładać" siebie w kolejkę w supermarkecie (mam nadzieję); działa w ten sam sposób tutaj.
Prawdopodobnie będziesz musiał użyć Listy.
To, czego szukasz, to LinkedList<T>
. Możesz dodać początek, środek (za pomocą AddBefore lub AddAfter) lub koniec listy.
Jest to korzystne w użyciu przy użyciu List<T>
, ponieważ można następnie użyć opcji Usuń pierwsze lub Usuń, aby dokładniej naśladować kolejkę lub stos.
Punkt kolejki polega na dostarczeniu abstrakcji interfejsu FIFO (first-in-first-out). Jeśli chcesz mieć możliwość interakcji ze strukturą danych w sposób inny niż kolejkowy, nie używaj kolejki.
Podczas gdy odpowiedzi na tej stronie są poprawne, jeśli znajdziesz się w pozycji, w której nie możesz użyć czegoś innego niż kolejka, możesz (z odrobiną narzutów) dodać element do środka kolejki. To, czy powinno się to robić, czy nie, to inna historia.
var myQueue = new Queue<string>();
myQueue.Enqueue("item 0");
myQueue.Enqueue("item 10");
var myList = myQueue.ToList();
myList.Insert(1, "item 5");
myQueue = new Queue<string>(myList);
Przydatna technika. Pamiętaj, że ponieważ tworzysz nową 'Queue', każda osoba z odniesieniem do starej kolejki nie zobaczy twojego wstawienia! Czasem jest OK, jeśli stara kolejka jest przekazywana "przez referencję" ORAZ nikt inny nie "odpycha" odniesienia do starej kolejki. To ostatnie wymaganie jest problemem: jeśli nie możesz zmienić używanej klasy, prawdopodobnie nie masz też gwarancji, że możesz zrobić nowy obiekt. W takim przypadku konieczne jest odjęcie wszystkich pozycji na listę tymczasową, wstawienie, a następnie ponowne ich dodanie. – ToolmakerSteve
Jeśli chcesz wstawić w „środku” kolejce, może być patrząc na „Kolejka priorytetowa”.
Niestety, to nie jest wbudowana klasa .Net, AFAIK. Ale przynajmniej teraz masz nazwę pojęcia, której szukasz.
Patrz to (zamknięte) Q & A dla niektórych potencjalnie przydatnych łączy:
Priority queue in .Net
Cytowanie stamtąd na pytanie
Kolejki priorytetowe są struktury danych, które zapewniają większą elastyczność niż proste sortowania ponieważ pozwalają one nowym elementom wchodzić do systemu w dowolnych odstępach czasu. O wiele bardziej opłacalne jest wstawianie nowego zadania do kolejki priorytetowej niż ponowne sortowanie wszystkiego po każdym takim przybyciu.
Podstawowym kolejka priorytetowa obsługuje trzy podstawowe operacje:
- Insert (q, x). Biorąc pod uwagę element x z kluczem k, wstaw go do kolejki priorytetowej Q.
- Znajdź-minimum (Q). Zwróć wskaźnik do pozycji , której wartość klucza jest mniejsza niż jakikolwiek inny klucz w kolejce priorytetu Q.
- Delete-Minimum (Q). Usuń pozycję z kolejki priorytetowej Q, której klucz jest minimalny:
- 1. Kolejki priorytetowe w C++
- 2. d3.js - jak wstawić nowe elementy rodzeństwa
- 3. Jak wstawić kod CIL do C#
- 4. Jak prawidłowo ustawiać kolejki zadań do uruchomienia w języku C#
- 5. Jak wstawić zdarzenie do początku kolejki wątków procesu wyświetlania zdarzeń w java?
- 6. Jak wstawić wartości do słownika C# w instancji?
- 7. Jak wstawiać elementy do wektora?
- 8. vim + C++: wstawić uuid do klauzuli wartownika
- 9. Gevent wątki nie dokończyć chociaż wszystkie elementy kolejki są wyczerpane
- 10. Jak dodać element do początku kolejki?
- 11. Jak wstawić luzem do MySQL przy użyciu C#
- 12. Jak wstawić CookieCollection do CookieContainer?
- 13. C++ Jak wstawić tablicę do unordered_map jako jej klucz?
- 14. jak wstawić do zestawu STL?
- 15. równoległe ForEach i kolejki
- 16. Jak wydrukować elementy wektora C++ w GDB?
- 17. Jak drukować elementy w wektorze C++
- 18. Jak wstawić programowo nową linię w komórce Excela w C#?
- 19. jak wstawić wartość do komórki DataGridView?
- 20. Jak wstawić element do tablicy c_char_p
- 21. Jak wysłać okresowe zadania do konkretnej kolejki w Seler
- 22. Przeniesienie wiadomości z kolejki martwej litery do kolejki wychodzącej MSMQ
- 23. unikać dodawania zduplikowane elementy do listy C#
- 24. wstawić obraz do bufora tekstowego
- 25. Jak wstawić zwykły tekst?
- 26. Kolejki pracy w Clojure
- 27. Jak iterować elementy Queue.Queue w języku Python?
- 28. doctrine 2 persist próbuje wstawić istniejące elementy zamiast ich aktualizacji
- 29. Wstępnie przydzielić przestrzeń dla kolejki C++ STL
- 30. Jak wstawić komentarz do każdej linii w VB.NET?
...nie mów mi, że jesteś jednym z tych ludzi, którzy próbują wejść do kolejki pośrodku w supermarkecie? :) Chodzi mi o to, że cały punkt kolejki polega na tym, że przedmioty wchodzą na jeden koniec, a pozostawiają na innym. Teraz zostawię to jako ćwiczenie dla czytelnika, aby dowiedzieć się, jak można wyjść z kolejki. :) –