#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);
}
}