Как Вы получили бы первые и последние объекты в Очереди?

Я - разработчик Автора Возвращения и некоторые проблемы, которые Вы упомянули, были зафиксированы в бете версии 2. Можно загрузить это от offcial веб-сайта с примером приложения также.

  • Требует автозагрузки (препятствующий производительности)
  • Использование по сути небезопасное понятие 'вопросов о безопасности'. Dealbreaker!

вопросы о безопасности теперь не используются, и более простая система забытого пароля была помещена на месте.

  • типы Возврата являются чем-то вроде мешанины истинных, ложных, ошибки и кодов успеха

, Это было зафиксировано в версии 2 и возвращает булевы значения. Я ненавидел мешанину так же как Вы.

  • не сцепляется в систему проверки CI

, пример приложения использует систему проверки CI.

  • не позволяет пользователю снова посылать код 'потерянного пароля'

происходящая Работа

, я также реализовал некоторые другие опции, такие как почтовые представления, это дает Вам выбор способности использовать помощников CodeIgniter в Ваших электронных письмах.

Это - все еще происходящая работа поэтому, если больше имеют предложения, сохраните их прибытием.

- Попкорн

пз: Спасибо за рекомендацию Возвращения.

8
задан Dan Tao 20 August 2009 в 19:01
поделиться

5 ответов

Одна вещь, которую вы могли бы сделать, - это создать временную переменную, в которой будет храниться значение, которое только что было поставлено в очередь, потому что это будет последнее значение, и поэтому переменная может быть доступна для получения этого значения.

16
ответ дан 5 December 2019 в 04:55
поделиться

Мне кажется, если вам нужен быстрый доступ к первому элементу в списке, значит, вы используете неправильную структуру данных. Вместо этого переключите LinkedList, который для удобства имеет свойства First и Last.

Убедитесь, что вы только добавляете и удаляете элементы в связанный список с помощью AddLast и RemoveFirst для сохранения свойства Queue. Чтобы не допустить непреднамеренного нарушения свойства Queue, рассмотрите возможность создания класса-оболочки вокруг связанного списка и предоставления только необходимых вам свойств из вашей очереди.

13
ответ дан 5 December 2019 в 04:55
поделиться
public class LastQ<T> : Queue<T>
{
    public T Last { get; private set; }

    public new void Enqueue(T item)
    {
         Last = item;
         base.Enqueue(item);
    }
}

Редактировать: Очевидно, этот базовый класс должен быть более устойчивым, чтобы выполнять такие действия, как защита свойства Last в пустой очереди. Но этого должно хватить для основной идеи.

5
ответ дан 5 December 2019 в 04:55
поделиться

Лучше всего отслеживать последнее значение, добавленное в Очередь , а затем использовать функцию myQueue.Peek () , чтобы увидеть «первый» (то есть следующий) элемент в списке, не удаляя его.

2
ответ дан 5 December 2019 в 04:55
поделиться

Вы могли использовать двухстороннюю очередь ( d ouble- e nded очередь ).

Я не думаю, что он встроен в System.Collections (.Generic), но вот некоторая информация о структуре данных. Если вы реализовали что-то подобное, вы могли бы просто использовать PeekLeft () и PeekRight () для получения первого и последнего значений.

Конечно, вам решать, будет ли реализация вашей собственной двухсторонней очереди предпочтительнее иметь дело с бесполезность ToArray (). :)

http://www.codeproject.com/KB/recipes/deque.aspx

2
ответ дан 5 December 2019 в 04:55
поделиться