我在c#中有一個用戶隊列(電子郵件字符串)a,我想向用戶發送他在這個隊列中的位置。獲取隊列c中元素的索引#
類似的東西;
Queue q = new Queue(32);
q.Enqueue(Session["email"].ToString());
queue.IndexOf(email);
任何想法?
感謝
我在c#中有一個用戶隊列(電子郵件字符串)a,我想向用戶發送他在這個隊列中的位置。獲取隊列c中元素的索引#
類似的東西;
Queue q = new Queue(32);
q.Enqueue(Session["email"].ToString());
queue.IndexOf(email);
任何想法?
感謝
也許List
或Array
將是這種行動更好,但你可以試試這個:
queue.ToArray().ToList().IndexOf(email);
如果你想讓用戶現在有多少元素是他的元素,只需在插入元素後返回當前隊列的.Count屬性即可。無論何時你推elemtn,計數都會增加。如果一個元素被彈出,計數會減少。
隊列是不正確的類型使用的IndexOf,查找列表
我知道沒有IndexOf!它只是我想要做的一個例子 – baaroz 2012-03-25 18:29:04
我的意思是,如果你需要一個集合,你需要知道元素在那個位置的位置收集,那麼Queue是錯誤的選擇。 @ionden回答瞭如何做到這一點,是正確的方式,但.. – 2012-03-25 18:31:31
不幸的是,你不能直接使用舊的.NET Queue
對象。隊列是爲「盲」的先進先出邏輯而設計的,因此除了那個之外你不能執行其他任何事情。
如果你真的需要實現一個隊列中,你可以找到的元素,並檢索其位置(一個非常有用的東西)嘗試在公開以下方法的類來包裝的一切:
public class CustomQueue<T> {
private LinkedList<T> fifoList = new LinkedList<T>();
public Enqueue(T newItem) {
//add newItem at the head of fifoList
}
public T Dequeue() {
//return and remove the item that is located at the tail of the queue
}
public int indexOf(T searchFor) {
int ret = 0;
for (T item: fifoList) {
if (item.equals(searchFor)) return ret;
ret++;
}
}
}
爲了更好地性能(排隊和出隊O(1),而的indexOf爲O(n)),你應該使用雙鏈表
您可以使用擴展方法是這樣的:
public static int IndexOf<T>(this IEnumerable<T> collection, T searchItem)
{
int index = 0;
foreach (var item in collection)
{
if (EqualityComparer<T>.Default.Equals(item, searchItem))
{
return index;
}
index++;
}
return -1;
}
使用Queue
的ToArray()
方法按照隊列的順序獲取數組,然後找到要搜索的對象。很有可能你不需要使用傳統隊列來執行你正在執行的任何任務。
喜歡的東西:
Queue q = new Queue();
q.Enqueue("apple");
q.Enqueue("banana");
q.Enqueue("orange");
// get banana index:
return Array.IndexOf(q.ToArray(), "banana");
這是一個可行的解決方案,但它更多地回答了這個問題:如何將隊列放入列表中,以便我可以調用IndexOf方法? – 2012-03-25 18:29:38
事實上,隊列沒有提供返回索引的接口,所以這是一個妥協解決方案 – ionden 2012-03-25 18:35:07
我很好,但是這需要第二個想法,如果可能的話 – 2012-03-25 18:36:36