1

私は最近リストを使用していますが、カスタム タイプ リストで年ごとに並べ替える方法が見つからないようです。リストを並べ替えるときに、年の情報を対象にする方法がわかりません。どんな助けでも大歓迎です。

私のコードは以下で見ることができます:

void Main()
{
    List<DVD> myDVDList = GetFilms();
}

// Define other methods and classes here

public List<DVD> GetFilms()
{
    var filmList = new List<DVD>();

    string filename = @"C:\Users\****\Desktop\film-list.txt";
    IEnumerable<string> rawList = File.ReadLines(filename);
    int index = 1;

    foreach(string line in rawList)
    {
        string[] filmInfo = line.Split('*');
        var newDVD = new DVD(index, filmInfo[0], filmInfo[1], int.Parse(filmInfo[2]), filmInfo[3]);
        filmList.Add(newDVD);

        index++;
    }

    return filmList;
}

public class Product
{
    public int IDNumber = 0;
    public string Name = "";
    public int Year = 0;

    public Product(int idNumber, string name, int year)
    {
        IDNumber = idNumber;
        Name = name;
        Year = year;
    }

    public virtual void ProductInfo()
    {
        Console.WriteLine(string.Format("{0} - {1} - {2}", IDNumber,Name,Year));
    }
}

public class DVD : Product
{
    public string Director = "";
    public string Genre = "";

    public DVD(int idNumber, string name, string director, int year, string genre) : base(idNumber, name, year)
    {
        Director = director;
        Genre = genre;
    }

    public override void ProductInfo()
    {
        Console.WriteLine(string.Format("[DVD - Product Information]: #{0} - {1} - {2} - {3} - {4}", IDNumber, Name, Director, Genre, Year));
    }
}
4

4 に答える 4

4

ジェネリックList<Product>オブジェクトでの LINQ の使用:

using System.Linq;
...
var orderedList = filmList.OrderBy(z => z.Year).ToList();
于 2012-12-19T12:41:54.563 に答える
2

List.Sortまたはを使用できますEnumerable.OrderBy

products.Sort((p1, p2) => p1.Year.CompareTo(p2.Year));

または (効率は落ちるが拡張性は高い):

products = products.OrderBy(p => p.Year).ToList();

元のリストを順序付きリストに置き換えたくない場合は、クエリを新しいリストに実体化する必要がないことに注意してください。

于 2012-12-19T12:43:53.683 に答える
0

このListクラスは何ですか?LINQ 式List<T>を実行できる を知っています。OrderBy(film => film.Year)

于 2012-12-19T12:44:16.427 に答える
0

まず、メソッドを入力して を返す必要がありますList<DVD>。型指定されたオブジェクトは、オブジェクトのボックス化/ボックス化解除を回避するための良い方法です。

public List<DVD> GetFilms()
{
    ...
}

したがって、列を並べ替えて表示する必要があります。この場合、ラムダ式を使用して、並べ替える列を設定できます。

// remeber to import
using System.Linq;

そして、次のようにします。

List<DVD> result = GetFilms();

foreach(DVD film in result.OrderBy(f => f.Year))
{
   Console.Write(filme.Name);
}

ヒントとして、Console.WriteLineクラス内で呼び出すことは避けてください。ToString()これはインターフェイス コマンドであり、モデル クラス内にメソッドを記述するのではなく、DVD クラスの Product クラスのメソッドにオーバーライドを提供すると便利です。

于 2012-12-19T12:48:15.237 に答える