2013-03-24 3 views
0

Использование примера/учебника here как отсортировать этот список по номеру детали ?. В настоящее время список просто печатается в порядке добавления пользователя:C# Сортировка связанного списка

for(int i = 0; i < Parts.Count; i++) 
    { 
     CarPart part = Parts.Retrieve(i); 
     Console.WriteLine("\nCar Part Information"); 
     Console.WriteLine("Part #:  {0}", part.PartNumber); 
     Console.WriteLine("Description: {0}", part.PartName); 
     Console.WriteLine("Unit Price: {0:C}", part.UnitPrice); 
    } 
+1

Вы спрашиваете, как реализовать сортировку или как использовать существующие методы сортировки .NET .NET? – driis

+0

Вы можете начать с изучения некоторых алгоритмов сортировки. Возьмите сортировку выбора, которая является самой простой: http://en.wikipedia.org/wiki/Selection_sort – BlackBear

+0

Вы хотите отсортировать список или хотите, чтобы выходные данные вашего кода были отсортированы? – Guffa

ответ

1
foreach(part in Enumerable.Range(0,Parts.Count) 
          .Select(i => Parts.Retrieve(i)) 
          .OrderBy(p => p.PartNumber)) 
{ 
     Console.WriteLine("Part #:  {0}", part.PartNumber); 
} 

Но было бы лучше, если ваш ListOfParts вернется IEnumerable<CarPart>

Это может быть что-то вроде этого

public IEnumerable<int> AllParts 
{ 
    get 
    { 
     for (Current = Head; Current != null; Current = Current.Next) 
     { 
      yield return Current; 
     } 
    } 
} 

и использование будет

foreach(part in Parts.AllParts.OrderBy(p => p.PartNumber)) 
{ 
    Console.WriteLine("Part #:  {0}", part.PartNumber); 
} 
1

Если вам нужно, чтобы иметь возможность вставлять и удалять в середине много, вы могли бы рассмотреть вопрос об использовании SortedDictionary, например:

(Примечание: Это требует партномера быть уникальными; разные части не могут иметь один и тот же PartNumber)

using System; 
using System.Collections.Generic; 

namespace Demo 
{ 
    internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      var parts = new SortedDictionary<string, CarPart>(); // Key is a string. 

      var part = new CarPart{PartNumber = "NumberOne", PartName = "NameOne", UnitPrice = 100.0m}; 
      parts.Add(part.PartNumber, part); 

      part = new CarPart{PartNumber = "NumberTwo", PartName = "NameTwo", UnitPrice = 100.0m}; 
      parts.Add(part.PartNumber, part); 

      part = new CarPart{PartNumber = "NumberThree", PartName = "NameThree", UnitPrice = 100.0m}; 
      parts.Add(part.PartNumber, part); 

      part = new CarPart{PartNumber = "NumberFour", PartName = "NameFour", UnitPrice = 100.0m}; 
      parts.Add(part.PartNumber, part); 

      foreach (var p in parts) 
      { 
       // Part numbers printed out in *alphabetical* order (because they are strings). 

       Console.WriteLine("Part number = " + p.Value.PartNumber); 
      } 
     } 
    } 

    public sealed class CarPart 
    { 
     public string PartNumber; 
     public string PartName; 
     public Decimal UnitPrice; 
    } 
} 
Смежные вопросы