如何订购List <string []>?</string []>

时间:2014-12-22 07:40:29

标签: c# csv

我正在使用此列表:

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

在我的档案中,我有:

    2,Sam,500.00
    6,Mike,400.00
    8,Robert,156.00
    3,Steve,100.85
    9,Anderson,234.90

的含义顺序: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;
    }

我如何通过提升到降薪来排序? 我正在以这种方式保存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());
                }
            }  

1 个答案:

答案 0 :(得分:6)

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

parsedData.OrderBy(row => Decimal.Parse(row[2]))

但我建议您创建一些Person类,它将以可读的方式存储您的数据

public class Person
{
   public int Id { get; set; }
   public string Name { get; set; }
   public decimal Salary { get; set; }
}

解析

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

然后,您将能够按工资对人员列表进行排序

people.OrderBy(p => p.Salary)

更具可读性。

注意:有方便的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);