У меня есть приложение, которое отображает набор данных, который позволяет мне вызывать пользовательский код .NET и зацикливаться на проблеме сортировки. Один столбец в моем наборе данных содержит как строки, так и числовые данные, и я хочу сортировать строки в алфавитном порядке и цифры численно. Все, что я могу сделать, это взять текущее значение, с которым работает сортировщик, и вернуть что-то..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;
}
}
Проблема:
Если я просто вернуть номер, то они упорядочиваются в алфавитном порядке и 10 будет прийти до 5 , и я даже не знаю, что произойдет с отрицательными цифрами.
Решение:
Один взломанный, который я думал, пытался преобразовать из удвоений (8 байтов) в unsigned longs (8 bytes). Это избавит нас от отрицательных чисел, так как они начнутся с нуля. Проблема 10 до 5 лет все еще остается. Для этого, возможно, пэд с 0s или что-то еще ...
Кажется, что это должно быть возможно, но сегодня у меня есть немой и не может быть умным.
пример данных:
'кошка'
'4'
'5.4'
'собака'
'-400'
'муравьед'
'12 .23.34.54'
«Я предложение»
'0'
, которые должны быть отсортированы по:
'12 .23.34.54'
'муравьед'
'кошка'
'собака'
'я предложение'
'-400'
'0'
'4'
'5.4'
Можете ли вы дать несколько примеров значения для этого столбца? Это просто текст с двойным добавлением? – BACON
Можно ли отправить здесь компас? http://msdn.microsoft.com/en-us/library/cfttsh47.aspx – jrsconfitto
Функции сравнения не работают, когда у вас есть только одно значение. Я могу вернуть строку из значения, которое оценивает сортировщик. Я сделаю это более ясным в своем описании – MStodd