Вывести книги определенного автора по возрастанию года издания(Как рационально)

Рейтинг: -1Ответов: 1Опубликовано: 01.04.2015

Существует файл. В нем записаны данные в виде:

Фамилия_Автора Название_книги:Год_Книги_Число

Если пользователь вводит фамилию автора - Выводим его книги с 1980

  1. Я нашел строки с нужным автором и записал их в List<string> books.

  2. Теперь у меня в памяти есть List<string> с именем books, заполненный строками книг в виде Фамилия_Автора Название_книги :Год_Книги_Число. Нужно отсортировать их по возрастанию года выпуска (т.е сначала 1980-е, потом 1990-е и т.д.).

Вопрос - как отсортировать?

Еще у меня есть подозрения, что я пошел не самым рациональным методом... Поэтому проблемы.

Заношу данные из файла:

foreach (string line in File.ReadLines(path, Encoding.Default))
// считываем строки файла, чтобы найти строки, содержащие заданные строки.
// Encoding.Default - (При отсутствии - знак кирилицы будет считываться как �)
// Получает кодировку для текущей кодовой страницы ANSI операционной системы.
{
    if (line.Contains(selectedAuthor))
    {
        if(Convert.ToInt32(line.Substring(line.IndexOf(':',0)+1)) >= fromYear)
        {
            books.Add(line);
        }
    }
}

Ответы

▲ 1Принят

Хранить данные о книге в строковом формате не очень рационально. Продуктивнее будет создать отдельный класс для книги:

public class Book
{
    public string Title
    {
        get;
        set;
    }

    public string Author
    {
        get;
        set;
    }

    public int PublicationYear
    {
        get;
        set;
    }
}

После чего создаете функцию для преобразования строки в объект книги:

public static Book ParseBook(string str)
{
    // Implementation 
}

Затем используете методы LINQ для преобразования всех строк из файла в книги и последующей обработке:

var books = File.ReadLines(path, Encoding.Default).Select(ParseBook);
var booksWrittenBySelectedAuthor = books.Where(b => b.Author == selectedAuthor).OrderBy(b => b.PublicationYear).ToList();