Как сделать мой Comparer для учета отрицательных чисел? Правильно знаю, что это сортирует числа в моей строке, но не оставляет знак минус («вычитание»). поэтому я получаю неправильный вывод, см. ниже код.Сортировка чисел в строках (массив)
public class MixedNumbersAndStringsComparer : IComparer<string>
{
public int Compare(string x, string y)
{
double xVal, yVal;
if (double.TryParse(x, out xVal) && double.TryParse(y, out yVal))
return xVal.CompareTo(yVal);
else
return string.Compare(x, y);
}
}
Фактический выход:
0 даг (е) 5 раз (г) - хх - хх
3 даг (е) 3 раз (г) - хх - хх
-4 даг (е) -17 раз (г) - хх - хх
-6 даг (е) -18 раз (г) - хх - хх
8 даг (е) 1 раз (г) - хх - хх
8 даг (е) 4 раз (г) - хх - хх
ожидается выход:
- 6 даг (е) -18 раз (г) - хх - хх
-4 даг (е) -17 раз (г) - хх - хх
0 даг (е) 5 раз (г) - xx - xx
3 даг (е) 3 раз (г) - хх - хх
8 даг (е) 1 раз (г) - хх - хх
8 даг (е) 4 раз (г) - хх - хх
входные данные:
TimeSpan tidtilbage = timeToExpire.GetTimeRemainingUntilPasswordExpiration("DOMAIN", p.SamAccountName);
TimeSpan under10 = new TimeSpan(10, 00, 00, 00);
TimeSpan ikkeMinus10 = new TimeSpan(-10, 00, 00, 00);
if (tidtilbage < under10 && tidtilbage > ikkeMinus10)
{
if (u.Enabled == true)
{
string lines = tidtilbage.Days + " dag(e) "
+ tidtilbage.Hours + " time(r)" + " - "
+ p.SamAccountName.ToUpper() + " - " + p.DisplayName + "\n\n";
sorted[i] = lines;
Array.Sort(sorted, new MixedNumbersAndStringsComparer());
i++;
}
}
Это немного неясно; неясно, как результат относится к фрагменту программы. Пожалуйста, внесите изменения. – Bathsheba
Не могли бы вы предоставить ожидаемое поведение и фактическое? Например. ожидаемый "-1"> "-5", фактический "-1" <"-5" –
А также дайте нам реальные входные значения. Вы сравниваете «-4» и «-17» или «-4 dag (e)» и «-17 time (r)»? – Pikoh