스택이 가장 좋고 가장 쉬운 방법이라는 것을 알고 있지만, 큐에서 마지막 요소를 빼낼 필요없이 아무것도 대기시킬 수 있습니까?대기열의 마지막 요소를 가져 오는 방법이 있습니까?
답변
당신은 사용할 수 LINQ의 (myQueue
이 대기열의 이름입니다) Enumerable.Last()
method :
var lastElement = myQueue.Last();
다른 언급이 자신은 종종이 작업을 수행 할 필요 발견하면, 당신은 아마 사용하는 방법에 대해 생각하고 싶지 않지만 다른 데이터 구조. 예를 들어, List<T>
는 :
var myElement = myList[myList.Length - 1];
아니, 당신은이 작업을 수행하기 위해 (ToList
또는 ToArray
를 사용하는) 다른 컬렉션에 큐를 변환해야합니다. 이렇게하면 큐의 모든 항목을 효과적으로 큐에서 빼낼 수 있습니다.
대기열의 마지막 항목이 필요하므로 잘못된 컬렉션을 사용하여 데이터를 보유하고 있음을 효과적으로 입증 한 것입니다. 컬렉션을 필요한 모든 작업을 제공하는 다른 유형으로 변경하는 것이 좋습니다.
대기열이 작업을 빠르게 수행하도록 설정되어 있지 않으므로 수행 할 수있는 최선은 O (n)입니다. 당신을 System.Linq을 가져 오는 경우
, 당신이 쓸 수 있습니다 : myQueue.Last()
을 간단히 수행 할 수 있습니다
// Assumes T is a reference type, if it's a value type, then
// you will get an instance with the bits zeroed out.
T item = queue.LastOrDefault();
문제는 여기에 때마다 당신이 대기열의 마지막 항목을 얻고 싶은 것입니다 대기열에있는 모든 항목을 통해 을 반복해야합니다.
대기열의 첫 번째 요소와 마지막 요소에 액세스하는 것이 중요한 경우 double-ended queue을 고려할 수 있습니다.
당신이 정말로 당신이해야하는 경우이를 사용하지만 다른 데이터 구조에 사용을 고려할 수 있습니다 이유뿐만 아니라 스택을 유지하지
public static class QueueExtensions<T>
{
const BindingFlags _flags =
BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance;
private static readonly FieldInfo _array =
typeof(Queue<T>).GetField("_array", _flags);
private static readonly FieldInfo _size =
typeof(Queue<T>).GetField("_size", _flags);
public T LastItem(this Queue<T> value)
{
if (value == null)
throw new ArgumentNullException("value");
if (value.Count == 0)
throw new ArgumentException("The queue cannot be empty.", "value");
var array = (T[])_array.GetValue(value);
var size = (int)_size.GetValue(value);
return array[size - 1];
}
}
-1, 죄송 합니다만, 이처럼 내부 구현에 의존하는 것을 정당화 할 수 없습니다. 너무 부서지기 쉽습니다. IMO를 사용하는 것이 더 좋은 방법은 더블 엔디드 액세스를 허용하는 다른 구조 (예 :'List
@casperOne - 내 대답에서 언급했듯이. – ChaosPandion
작동하지 않을 것입니다. Resharper 또는 유사한 방법으로'Queue
- 1. List.Single을 사용하여 기본 키가있는 요소를 가져 오는 다른 방법이 있습니까?
- 2. Selenium을 사용하여 페이지의 모든 요소를 자동으로 가져 오는 방법이 있습니까?
- 3. UILabel 텍스트의 shadowPath를 가져 오는 방법이 있습니까?
- 4. iframe에서 요소를 가져 오는 방법
- 5. ClassLoader가로드 한 클래스를 가져 오는 방법이 있습니까?
- 6. SQLite로 데이터를 가져 오는 쉬운 방법이 있습니까?
- 7. iCal 파일을 FullCalendar로 가져 오는 방법이 있습니까?
- 8. HashSet의 현재 용량을 가져 오는 방법이 있습니까?
- 9. div의 스타일 속성을 가져 오는 방법이 있습니까?
- 10. 등록 주소를 가져 오는 방법이 있습니까?
- 11. 스크롤바 높이와 너비를 가져 오는 방법이 있습니까?
- 12. DOMElement의 모든 속성을 가져 오는 방법이 있습니까?
- 13. Open Graph에서 데이터를 가져 오는 방법이 있습니까?
- 14. 버즈에서 댓글을 가져 오는 방법이 있습니까?
- 15. $ .ajax의 기본 객체를 가져 오는 방법이 있습니까
- 16. 텍스트가없는 UIDatePickerView를 가져 오는 방법이 있습니까?
- 17. 대기열의 첫 번째 항목과 마지막 항목은 어떻게 얻을 수 있습니까?
- 18. 해당 속성의 가져 오기 도구에서 PropertyInfo를 가져 오는 방법이 있습니까?
- 19. WinForms TabControl에서 TabPage의 경계를 가져 오는 방법이 있습니까?
- 20. Facebook에서 올린 동영상의 큰 미리보기 이미지를 가져 오는 방법이 있습니까?
- 21. jQuery에서 애니메이션의 최종 값을 가져 오는 방법이 있습니까?
- 22. .NET에서 사용할 RegEx.Replace에서 사용 된 변수를 가져 오는 방법이 있습니까?
- 23. HtmlUnit에서 Xpath로 요소를 가져 오는 방법
- 24. listView에서 구성 요소를 가져 오는 방법은 무엇입니까?
- 25. 자바 스크립트를 사용하여 요소를 가져 오는 방법
- 26. 이전 요소를 std :: deque에서 가져 오는 방법?
- 27. Jquery로 관련 요소를 가져 오는 방법은 무엇입니까?
- 28. href 요소를 선택기로 가져 오는 방법은 무엇입니까?
- 29. 배열의 중간 요소를 가져 오는 방법은 무엇입니까?
- 30. XPath를 사용하여 요소를 가져 오는 방법은 무엇입니까?
를? – Kakira
가능한 복제본 [처음 대기열에서 마지막 항목을 얻는 방법은 무엇입니까?] (http://stackoverflow.com/questions/1308186/how-would-you-obtain-the-first-and-last-items- in-a-queue) – nawfal