【问题标题】:Sorting CSV file by column using QuickSort c#使用 QuickSort c# 按列对 CSV 文件进行排序
【发布时间】:2020-05-17 20:41:08
【问题描述】:

我有一个名为 Item.csv 的文件,其中包含以下信息:

categoryName, currentPrice, currencyId
Boots, 19.95, GBP
Thermometers,2.03,GBP
Garden Sheds,38.95,GBP

我想使用 QSortAlgorithm 按价格对内容进行排序并将其保存为 sortedItem.csv。 到目前为止,我可以使用 QSortAlgorithm 拉出价格列并对其进行排序,但我不知道如何将它们放在一起。任何帮助将不胜感激。

List <double> priceList=new List<double>();
            using (StreamReader sr = new StreamReader("Items.csv"))
            {
                String line;

                while ((line = sr.ReadLine()) != null)
                {
                    string[] parts = line.Split(',');
                    string price = parts[1]; 
                    if(price!="currentPrice")
                    priceList.Add(Convert.ToDouble(price));
                }
            }    
            double [] priceArray=new double[priceList.Count];
             priceArray=priceList.ToArray();
             QuickSort(ref priceArray);
             for(int i=0;i<priceArray.Length;i++)
             Console.WriteLine(priceArray[i]);       

【问题讨论】:

    标签: c# csv sorting quicksort


    【解决方案1】:

    你可以把所有的东西放在一起。我也不知道你的 Quicksort 算法,但是 List 类的 sort 方法似乎做得很好。

    这里是你的代码用一个对象重新设计并按价格排序:

    List<Item> items = new List<Item>();
    using (StreamReader sr = new StreamReader("Items.csv"))
    {
        string line;
    
        while ((line = sr.ReadLine()) != null)
        {
            string[] parts = line.Split(',');
            string price = parts[1];
            if (price != "currentPrice")
                items.Add(new Item
                {
                    CurrentPrice = Convert.ToDouble(price),
                    CategoryName = parts[0],
                    CurrencyId = parts[2]
                });
        }
    }
    foreach (Item item in items.OrderBy(i => i.CurrentPrice))
        Console.WriteLine(item.CategoryName + "," +
                          item.CurrentPrice + "," +
                          item.CurrencyId);
    
    public class Item
    {
        public string CategoryName { get; set; }
        public double CurrentPrice { get; set; }
        public string CurrencyId { get; set; }
    }
    

    但您应该考虑使用 CSV 解析器,因为它是一种更简洁的方法。 就像这里描述的TextFieldParser https://stackoverflow.com/a/20523165/11896942

    【讨论】:

    猜你喜欢
    • 2015-12-24
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 2011-01-07
    • 2019-08-23
    • 1970-01-01
    • 2012-08-09
    相关资源
    最近更新 更多