Я искал стандартную реализацию двунаправленного связанного списка в c# (так, чтобы у меня был связанный список, которого я могу выполнить итерации назад), и не может найти тот. Я чувствую, что что-то столь простое должно иметь реализацию, что я просто отсутствую.
Если это действительно существует, для которой версии c#/.net это существует?
Обратное повторение в целом, кажется, что-то не предназначенное, чтобы быть сделанным в c#. Мой ум просто застревает слишком много в c ++/stl режим или является этим что-то очень недостающее c#?
Я знаю о LinkedList, но в отказе найти, что способ выполнить итерации по нему назад предположил, что был отдельно связан.
Если LinkedList вдвойне связан, как каждый идет об итерации по нему назад (Эффективно)?
В качестве ответов, приведенных здесь, вы можете написать метод расширения в LinkedListList
, чтобы сделать это немного проще повторно использовать:
public static IEnumerable<T> Backwards(this LinkedList<T> list)
{
LinkedListNode<T> node= list.Last;
while (node != null)
{
yield return node.Value;
node = node.Previous;
}
}
Используйте с:
foreach (string x in list.Backwards())
{
// ...
}
См. SD's профилировщик PHP . Измеряет частоту выполнения во всем приложении и обеспечивает графическое отображение исполняемого кода. Для установки PHP-сервера не требуется никаких изменений.
-121--2965461-Если вы используете Spring, версия 3 .x имеет то, что вы ищете: http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/http/HttpStatus.html
-121--587433-Как насчет LinkedList ?
Следующий код будет эффективно расти по поводу ссылки в обратном направлении:
LinkedList<string> list = new LinkedList<string>
(new[] {"cat", "dog", "frog", "antelope", "gazelle"});
LinkedListNode<string> item = list.Last;
do
{
Console.WriteLine(item.Value);
item = item.Previous;
}
while (item != null);
Console.ReadKey();
Ключ здесь заключается в том, что ссылка содержит ссылку на первое и последнее значение LinkedListnode в списке. Каждый экземпляр LinkedListnode содержит ссылку на следующий и предыдущий элемент в списке (или NULL в каждом конце списка), а также свойство Value. Это означает, что итерация из первого или последнего LinkedListnode легко, но случайный доступ требует итерации из первого или последнего в списке.
Если вам нужно сделать введение по пути, используйте LinkedList.addbefore или дополнительно вставить новый LinkedListnode.
См. Профилировщик PHP SD . Измеряет частоту выполнения во всем приложении и обеспечивает графический дисплей исполняемого кода. Для установки PHP-сервера не требуется никаких изменений.
-121--2965461-Если вы используете Spring, версия 3.x имеет то, что вы ищете: http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/http/HttpStatus.html
-121--587433-Сведения о System.Collections.Generic.LinkedList ()
Вот документы по MSDN:
http://msdn.microsoft.com/en-us/library/he2s3bh7.aspx
Информация о версии
.NET Рамки: поддерживается в: 3,5, 3,0, 2,0
.NET Compact Рамки: поддерживается в: 3,5, 2,0
XNA Framework: Supported in: 3.0, 2.0, 1.0
То есть я с остальными считаю, что обычно при работе с такой богатой структурой предпочтительнее использовать более высокую абстракцию.