Как отсортировать список флажков по их названию? - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть цикл foreach, который заполняет список checkboxes из groupbox.Проблема в том, что они добавляются в случайном порядке.Поскольку я назвал их все по возрастанию в алфавитном порядке, я хочу отсортировать их по их Name правильности.

Я уже пытался использовать .Sort(), но это ничего не дает.Также я попытался использовать выражение Linq DigBoxes = DigBoxes.OrderBy(x => x.Name).ToList();

Но оно также ничего не делает ...

Вот мой код:

GroupBox box = (GroupBox)e.Argument;
string DigInput = "";
List<CheckBox> DigBoxes = new List<CheckBox>();

foreach (Control c in box.Controls)
{
    if(c is CheckBox)
    {
        DigBoxes.Add(c as CheckBox);
    }
}
DigBoxes = DigBoxes.OrderBy(x => x.Name).ToList();

Ответы [ 2 ]

2 голосов
/ 18 апреля 2019

Я ухожу от некоторой информации, которую вы предоставили в комментарии о числах в имени, поэтому я могу быть или не быть здесь ..
В зависимости от того, сколько у вас есть, вы обязательно увидите проблему. Сортировка по Name - это прямое сравнение строк, то есть не учитывает числовые значения одинаковым образом.

Например, предположим, что ваша коллекция состоит из CheckBox_7 и CheckBox_10. Если вы хотите, чтобы они были в числовом порядке, вы ожидали бы, что 7 будет стоять до 10. Это не относится к строкам. В индексе 9 каждого имени у нас есть 7 и 1.7, очевидно, больше, что означает в целом, "CheckBox_7" будет идти после "CheckBox_10".

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

0 голосов
/ 18 апреля 2019

Вы пробовали что-то вроде этого:

var items = CheckBoxList1.Items
            .Cast<ListItem>()
            .OrderBy(i=>i.Text)
            .ToArray();
        CheckBoxList1.Items.Clear();
        CheckBoxList1.Items.AddRange(items);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...