У меня есть текстовый список, и я хочу создать обычную логику сравнения для сортировки этих списков с помощью C#. Например.Как создать собственный общий сопоставитель число-текст в C# для сортировки числового/строкового списка?
var numericList = new List<string>{"100", "--", "-0.98", "N/A", "0.00", "-888"};
var stringList = new List<string> {"Smith", "--", "Peter", "", "Jim", "Ken", "NA"};
, который содержит специальные символы, такие как -, N/A, пространство и т.д. И ожидаемый результат после того, как-то будет - Для NemericList возрастанию -> N/A, -, -888, - 0,98, 0,00, 100 Для StringList возрастанию -> Джим, Кен, N/A, Питер Смит, Empty, -
я создал следующие пользовательские компаратор логики, которая делает некоторый уровень сортировки, но не соответствие с ожидаемый результат. Пожалуйста, предложите мне способ добиться этого.
public class NumberTextComparer : IComparer<string> { public int Compare(string s1, string s2) { double number1, number2; var isS1Numeric = double.TryParse(s1, out number1); var isS2Numeric = double.TryParse(s2, out number2); if (isS1Numeric && isS2Numeric) { if (number1 > number2) return 1; if (number1 < number2) return -1; return 0; } return isS1Numeric ? 1 : (isS2Numeric ? -1 : String.Compare(s1, s2, StringComparison.OrdinalIgnoreCase)); } }
var comparer = new NumberTextComparer();
var numericSortedListASC = numericList.OrderBy(str => str, comparer);
var stringSortedListASC = stringList.OrderBy(str => str, comparer);
Что именно не работает о вашем сравнении? – Matthew
Порядок сортировки не выполняется в обеих ситуациях. –
правильно, я имел в виду, что вы получаете и чего вы ожидаете? – Matthew