Сортировка файла CSV по столбцам с помощью QuickSort c# - PullRequest
0 голосов
/ 01 февраля 2020

У меня есть файл с именем 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]);       

1 Ответ

0 голосов
/ 03 февраля 2020

Вы могли бы объект, чтобы собрать все вместе. Я также не знаю ваш алгоритм быстрой сортировки, но метод сортировки класса List, похоже, хорошо работает.

Здесь ваш код переработан с использованием объекта и отсортирован по цене:

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, описанный здесь { ссылка }

...