-1

ここの例/チュートリアルを使用して、このリストを部品番号でどのようにソートしますか?. 現在、リストはユーザーの追加順に単純に出力されます。

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

2 に答える 2

1

途中で何度も挿入および削除できるようにする必要がある場合は、SortedDictionary の使用を検討できます。次に例を示します。

(注: これには PartNumber が一意である必要があります。異なるパーツが同じ 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;
    }
}
于 2013-03-24T17:58:58.500 に答える
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);
}
于 2013-03-24T17:33:42.577 に答える