c#/.net x.x имеют реализацию двунаправленного связанного списка (который может быть выполнен с помощью итераций назад)?

Я искал стандартную реализацию двунаправленного связанного списка в c# (так, чтобы у меня был связанный список, которого я могу выполнить итерации назад), и не может найти тот. Я чувствую, что что-то столь простое должно иметь реализацию, что я просто отсутствую.

Если это действительно существует, для которой версии c#/.net это существует?

Обратное повторение в целом, кажется, что-то не предназначенное, чтобы быть сделанным в c#. Мой ум просто застревает слишком много в c ++/stl режим или является этим что-то очень недостающее c#?

Я знаю о LinkedList, но в отказе найти, что способ выполнить итерации по нему назад предположил, что был отдельно связан.

Если LinkedList вдвойне связан, как каждый идет об итерации по нему назад (Эффективно)?

6
задан Catskul 1 February 2010 в 17:54
поделиться

4 ответа

В качестве ответов, приведенных здесь, вы можете написать метод расширения в 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())
{
    // ...
}
6
ответ дан 8 December 2019 в 12:20
поделиться

См. 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 ?

1
ответ дан 8 December 2019 в 12:20
поделиться

Следующий код будет эффективно расти по поводу ссылки в обратном направлении:

        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.

10
ответ дан 8 December 2019 в 12:20
поделиться

См. Профилировщик 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

То есть я с остальными считаю, что обычно при работе с такой богатой структурой предпочтительнее использовать более высокую абстракцию.

2
ответ дан 8 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: