[英]C# Sorting Linked List
使用此处的示例/教程将如何按零件号对该列表进行排序? 当前,仅按用户添加的顺序打印列表:
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);
}
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);
}
如果需要在中间插入和删除很多内容,则可以考虑使用SortedDictionary,例如:
(注意:这要求零件号是唯一的;不同的零件不能具有相同的零件号)
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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.