2013-03-24 132 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; 
    } 
}