Получить индекс элемента внутри очереди с#

У меня есть очередь пользователей(строка писем) a в C#, и я хочу отправить пользователю его местоположение в этой очереди.

что-то вроде:

Queue q = new Queue(32);

q.Enqueue(Session["email"].ToString());

    queue.IndexOf(email);

какие идеи?

спасибо

7 ответов


может быть List или Array было бы лучше для таких действий, но вы можете попробовать следующее:

queue.ToArray().ToList().IndexOf(email);

вы можете использовать метод расширения, что-то вроде:

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;
}

очередь не является правильным типом для использования IndexOf, ищите List


к сожалению, вы не можете прямо использовать простой старый .NET


Если вы хотите позволить пользователю теперь, сколько элементов находится за его элементом, просто верните текущую очередь .Count свойство, после вставки его элементов. Всякий раз, когда вы нажимаете elemtn, количество увеличивается. Если элемент выскочил, количество уменьшается.


использовать Queue ' s ToArray() способ получить массив в порядке очереди, а затем найти объект, который вы ищете. Есть хороший шанс, что вам не нужно использовать традиционную очередь для любой задачи, которую вы выполняете.

что-то типа:

Queue q = new Queue();
q.Enqueue("apple");
q.Enqueue("banana");
q.Enqueue("orange");

// get banana index:
return Array.IndexOf(q.ToArray(), "banana");

поскольку вы запрашиваете пользователя, он всегда будет последним человеком в списке, что означает, что это будет эквивалентно queue.Count.