如何订购清单<string []>?

AAl*_*oVR 1 c# csv

我正在使用此列表:

 List<string[]> parserData = ReadParserData(@"C:/File.csv", ',');
Run Code Online (Sandbox Code Playgroud)

在我的文件里面我有:

    2,Sam,500.00
    6,Mike,400.00
    8,Robert,156.00
    3,Steve,100.85
    9,Anderson,234.90
Run Code Online (Sandbox Code Playgroud)

在意义顺序中:ID,Name,Salary.

   private static List<string[]> ReadParserData(string path, char delimiter)
    {
        var parserData = new List<string[]>();
        using (var sr = new StreamReader(path))
        {
            string line;
            while ((line = sr.ReadLine()) != null)
            {
                string[] row = line.Split(delimiter);
                parserData.Add(row);
            }
        }
        return parserData;
    }
Run Code Online (Sandbox Code Playgroud)

我如何通过提升到降薪来排序?我正在以这种方式保存CSV文件......

  using (var sw = new StreamWriter(@"C:/AscendingSalary.csv"))
            {
                foreach (string[] row in parserData)
                {
                    var sb = new StringBuilder();

                    foreach (string s in row)
                    {
                        sb.Append(s + ",");
                    }

                    sb.Remove(sb.Length - 1, 1);
                    sw.WriteLine(sb.ToString());
                }
            }  
Run Code Online (Sandbox Code Playgroud)

Ser*_*kiy 6

您只需解析薪水(行中的第三项)并使用OrderByOrderByDescending方法来订购行:

parsedData.OrderBy(row => Decimal.Parse(row[2]))
Run Code Online (Sandbox Code Playgroud)

但我建议你创建一些Person以可读方式存储数据的类

public class Person
{
   public int Id { get; set; }
   public string Name { get; set; }
   public decimal Salary { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

解析

var people = from line in File.ReadLines(path)
             let parts = line.Split(delimiter)
             select new Person {
                Id = Int32.Parse(parts[0]),
                Name = parts[1],
                Salary = Decimal.Parse(parts[2])
             };
Run Code Online (Sandbox Code Playgroud)

然后你就可以用这种方式按工资对人员列表进行排序

people.OrderBy(p => p.Salary)
Run Code Online (Sandbox Code Playgroud)

更具可读性.

注意:有方便的File.ReadLines方法.


要保存人员数据,您只需编写格式化的行:

var lines = from p in people
            orderby p.Salary
            select String.Format("{0},{1},{2}", p.Id, p.Name, p.Salary);

File.WriteAllLines(@"C:/AscendingSalary.csv", lines);
Run Code Online (Sandbox Code Playgroud)