按 属性 排序文本文件(例如 .last_name)

sort text file by property (e.g. .last_name)

我在 Whosebug 上搜索了这个问题的答案,但找不到明确的答案。

我有这个播放器 Class(是的,我之前发布过 class)

namespace Tennis_Match
{
class Player
{
    private string first_name;
    private string middle_name;
    private string last_name;
    private DateTime dob;
    private string nat;
    private char gender;
    public string First_name { get { return first_name; } set { first_name = value; } }
    public string Middle_name { get {return middle_name; } set { middle_name = value; } }
    public string Last_name { get { return last_name; } set { last_name = value; } }
    public DateTime Dob { get { return dob; } set { dob = value; } }
    public string Nat { get { return nat; } set { nat = value; } }
    public char Gender { get { return gender; } set { gender = value; } }
    public Player(string first_name, string last_name, string middle_name, DateTime dob, string nat, char gender)
    {
        this.first_name = first_name;
        this.last_name = last_name;
        this.middle_name = middle_name;
        this.dob = dob;
        this.nat = nat;
        this.gender = gender;
    }
    public override string ToString()
    {
        return first_name + " " + middle_name + " " + last_name + " " + dob + " "+ nat + " " + gender;
    }

    public static int CalculateAge(DateTime dob)
    {
        int years = DateTime.Now.Year - dob.Year;

        if ((dob.Month > DateTime.Now.Month) || (dob.Month == DateTime.Now.Month && dob.Day > DateTime.Now.Day))
            years--;

        return years;
    }

    private List<string> content = new List<string>();
    public string FileName { get; set; }
    public string Delimiter { get; set; }
    private void Load()
    {
        TextFieldParser par = new TextFieldParser(FileName);
        par.TextFieldType = FieldType.Delimited;
        par.SetDelimiters(Delimiter);
        while (!par.EndOfData)
        {
            string[] fields = par.ReadFields();
            foreach (string field in fields)
            {
                Console.WriteLine(field);
            }
        }
        par.Close();
    }
    public void RunReadCSVFile(string fn, string delim = "|")
    {
        FileName = fn;
        Delimiter = delim;
        Load();
    }
    public string GetLine(string fileName, int line)
    {
        using (var sr = new StreamReader(fileName))
        {
            for (int i = 1; i < line; i++)
                sr.ReadLine();
            return sr.ReadLine();
        }
    }
}
}

然后我还有一个 class 锦标赛。我想根据 Last_name 对文本文件进行排序。我有一个想法,我可能需要使用 IComparable 来对文件进行排序。 该文件的结构如下:

1|Mariuss|Luka|Thygesen|1986-07-25|NAURU|NR

首先你没有什么可排序的。所以添加到 class

 static List<Player> players = new List<Player>();

接下来您需要在以下函数中将项目添加到列表

       private void Load()
        {
            TextFieldParser par = new TextFieldParser(FileName);
            par.TextFieldType = FieldType.Delimited;
            par.SetDelimiters(Delimiter);
            while (!par.EndOfData)
            {
                string[] fields = par.ReadFields();
                foreach (string field in fields)
                {
                    Console.WriteLine(field);
                }
                //-----------------------------Add -----------------------
                Player newPlayer = new Player(fields[0], fields[1], fields[2], DateTime.Parse(fields[3]), fields[4], fields[5][0]);
                players.Add(newPlayer);
            }
            par.Close();
        }

现在你有东西要整理了。所以添加一个排序方法(或者CompareTo())

public void Sort()
        {
            players = players.OrderBy(x => new { x.last_name, x.first_name, x.middle_name }).ToList();
        }