Получение последних записей

#c# #.net #xml #sorting

#c# #.net #xml #сортировка

Вопрос:

У меня есть список записей в Xml-файле, где каждая запись указана в качестве даты создания.Не могли бы вы, пожалуйста, предложить мне эффективный способ получения двух последних записей.

Xml-файл можно использовать следующим образом:

 <Records>
    <Record>
        <RecordID>1<RecordID>
        <CreationDate>Apr 01, 2011 10:15 <CreationDate>
   <Record>
   <Record>
        <RecordID>2<RecordID>
        <CreationDate>Jan 12, 2011 10:15<CreationDate>
   <Record>
   <Record>
       <RecordID>3<RecordID>
       <CreationDate>Feb 12, 2011 09:00<CreationDate>
   <Record>
         .
         .
         .
         .
   many such records...
<Records>
  

Весь этот xml будет преобразован в список, но тогда не могли бы вы подсказать мне эффективный способ извлечения последних двух записей из списка.

Спасибо.

Комментарии:

1. Возможно, вам следует быть немного более точным и объяснить, какой язык вы используете и в какой тип данных вы будете преобразовывать свой xml.

2. Привет, Антуан, я использую C#.net и использование visual Studio create schema для создания файла схемы и xsd.exe для генерации объектов из записей xml. public partial class { private RecordsRecord[] recordField; /// <примечания/> [System.Xml.Сериализация. XmlElementAttribute(«Record»)] общедоступная запись Record[] Record { get { return this.recordField; } set { this.recordField = value; } } } и общедоступный частичный класс RecordsRecord {поле для записи частного байта; поле для создания частной строки;

3. К сожалению, функции не читаются в комментарии выше, поэтому снова добавляем записи общедоступного частичного класса {private RecordsRecord[] recordField; public RecordsRecord[] Record { get { return this.recordField; } set { this.recordField = value; } } }

4. и еще одно: общедоступный частичный класс RecordsRecord {поле для записи частного байта; поле для создания частной строки; поле для записи общего байта { get { return this.recordIDField; } set { this.recordIDField = value; } } дата создания общедоступной строки { get { return this.creationDateField; } set { this.creationDateField = value; } }

Ответ №1:

Вам нужно сохранить дату создания как объект DateTime, а не как строку. Реализуйте метод сравнения в вашем классе Record, который сравнивает даты создания. Затем, если вы храните свои записи в списке, вы должны иметь возможность сортировать его. В приведенном ниже примере последние записи будут в конце, поэтому, если вы хотите, чтобы они просто перевернули список.

 List<Records> recordList = parseXml(); // populate your list
recordList.Sort(new Comparison<Record>(Record.Comparison)); // sort in creation date ascending order
recordList.Revers(); // reverse the elements in the list

Record[] the2latest = new Record[2]{recordList[0], recordList[1]};

public partial class Record
{
   public static int Comparison(Record r1, Record r2)
    {
        return DateTime.Compare(r1.creationDate, r2.creationDate);
    }
}