Сортировка данных в списке массивов C # Windows phone 7 - PullRequest
0 голосов
/ 04 августа 2011

Я пытаюсь отсортировать данные в списке массивов.

Например, формат данных следующий:

"9:34 AM ~ Schedule 12".

И я хочу, чтобы он сортировал только по времени" 9: 34 AM ~ Расписание 12".

Ниже приведен код для сортировкино это не похоже на работу:

Array.Sort(timeSplit, delegate(string first, string second, string third)
{
    return DateTime.Compare(Convert.ToDateTime(first), Convert.ToDateTime(second), third);
});

Ответы [ 3 ]

3 голосов
/ 04 августа 2011

Проблема почти наверняка в том, что вы пытаетесь преобразовать вашу строку в DateTime:

Convert.ToDateTime(first)

Ваша строка не в «стандартном» формате.

Я бы предложил использоватьПодстрока, чтобы удалить текст «~ Schedule», а затем выполнить синтаксический анализ строки:

var myDate = DateTime.ParseExact("9:34 AM~Schedule 12".Substring(0,7), "h:mm tt");

Затем вы можете использовать DateTime.TimeOfDay в своем сравнении.

2 голосов
/ 04 августа 2011

Сначала вы должны удалить третью строку, потому что делегат сортировки принимает только два параметра.Во-вторых, данные, которые вы передаете, не являются действительными DateTime, вы должны сначала преобразовать их в дату.Итак:

Array.Sort(timeSplit, delegate(string first, string second)
{
    //assuming all data have the same format: "9:34 AM~Schedule 12" .
    int firstLength = first.IndexOf("~");
    int secondLength = second.indexOf("~");

    return DateTime.Compare(Convert.ToDateTime(first.Substring(0, firstLength)), Convert.ToDateTime(second.Substring(0, secondLength)));
});
0 голосов
/ 04 августа 2011

вы можете попробовать что-то вроде:

        string[] arr = new string[]
        {
            "9:34 AM~Schedule 1",
            "11:34 PM~Schedule 12",
            "9:34 AM~Schedule 3",
            "10:14 AM~Schedule 10",
            "9:34 AM~Schedule 2",
            "9:30 PM~Schedule 12"
        };

        var ordered = from a in arr
                      let split = a.Split('~')
                      orderby Convert.ToDateTime(split[0]), split[1]
                      select a;

        string[] orderedData = ordered.ToArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...