2013-03-24 133 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框架排序方法? – driis 2013-03-24 17:28:35

+0

您可以从查看一些排序算法开始。采取最简单的选择排序:http://en.wikipedia.org/wiki/Selection_sort – BlackBear 2013-03-24 17:28:38

+0

您是否想对列表进行排序,还是希望将代码的输出进行排序? – Guffa 2013-03-24 17:33:48

回答

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