У меня есть приложение, которое отображает набор данных, который позволяет мне вызывать пользовательский код .NET, и я застрял в проблеме сортировки. Один столбец в моем наборе данных содержит как строки, так и числовые данные, и я хочу отсортировать строки по алфавиту и по номерам. Все, что я могу сделать, это взять текущее значение, с которым работает сортировщик, и вернуть что-то.
Если мой список равен {"-6", "10", "5"}, я хочу создать строки из тех чисел, которые отсортировали бы их по алфавиту. Я пришел к выводу, что все они должны быть положительными, а затем дополнены нулями, например:
public object Evaluate(object currentValue)
{
//add 'a' to beginning of non-numbers, 'b' to beginning of numbers so that numbers come second
string sortOrder = "";
if(!currentValue.IsNumber)
sortOrder = "a" + currentValue;
else
{
sortOrder = "b"
double number = Double.Parse(currentValue);
//add Double.MaxValue to our number so that we 'hopefully' get rid of negative numbers, but don't go past Double.MaxValue
number += (Double.MaxValue / 2)
//pad with zeros so that 5 comes before 10 alphabetically:
//"0000000005"
//"0000000010"
string paddedNumberString = padWithZeros(number.ToString())
//"b0000000005"
//"b0000000010"
sortOrder += paddedNumberString;
}
}
Проблема:
Если я просто верну число, то они будут отсортированы в алфавитном порядке, и перед 5 появится 10, и я даже не знаю, что будет с отрицательными числами.
Решение:
Один хак, о котором я думал, пытался преобразовать из двойных (8 байт) в беззнаковые длинные (8 байт). Это избавило бы от отрицательных чисел, так как они начинались бы с 0. Однако проблема 10, предшествующая 5, все еще остается. Для этого, возможно, pad с 0 или что-то ...
Кажется, это должно быть возможно, но у меня сегодня тупой и не умный.
пример данных:
'Кошка'
'4'
'5,4'
'Собака'
'-400'
'Муравьед'
'12 .23.34.54'
«Я - предложение»
'0'
, которые следует отсортировать по:
'12 .23.34.54'
'Муравьед'
'Кошка'
'Собака'
«Я - предложение»
'-400'
'0'
'4'
'5,4'