У меня есть список записей в файле 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 в список, но тогда вы можете сказать мне эффективный способ извлечения двух последних записей из списка.

Спасибо.

0
Suhas 15 Апр 2011 в 11:42
Возможно, вам следует быть немного более точным и объяснить, какой язык вы используете и в какой тип данных вы будете преобразовывать свой xml.
 – 
Antoine
15 Апр 2011 в 11:58
Привет, Антуан, я использую C#.net и использую схему создания визуальной студии для создания файла схемы и xsd.exe для создания объектов из xml. открытый частичный класс Records { private RecordsRecord[] recordField; /// [System.Xml.Serialization.XmlElementAttribute("Record")] public RecordsRecord[] Record { get { return this.recordField; } установить { this.recordField = значение; } } } и общедоступный разделяемый класс RecordsRecord { private byte recordIDField; создание закрытой строки DateField;
 – 
Suhas
15 Апр 2011 в 12:33
Извините, функции не читаются в приведенном выше комментарии, поэтому снова добавьте публичный частичный класс Records { private RecordsRecord[] recordField; public RecordsRecord[] Record {get { return this.recordField; } установить { this.recordField = значение; } } }
 – 
Suhas
15 Апр 2011 в 12:43
И еще один: общедоступный частичный класс RecordsRecord { private byte recordIDField; создание закрытой строки DateField; открытый байт RecordID {получить {вернуть this.recordIDField; } установить { this.recordIDField = значение; } } общедоступная строка CreationDate { get { return this.creationDateField; } установить { this.creationDateField = значение; } } }
 – 
Suhas
15 Апр 2011 в 12:44

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);
    }
}
0
Antoine 15 Апр 2011 в 14:17