#c# #string #winforms #sorting #windows-forms-designer
Вопрос:
Я пытаюсь разрешить пользователю вводить десять буквенно-цифровых значений в 10 текстовых полей в порядке возрастания. Как только значения будут введены, я хочу использовать любой алгоритм сортировки, чтобы проверить, правильно ли отсортированы значения, чтобы я мог отобразить сообщение пользователю о том, что их порядок был либо правильным, либо неправильным. Я не уверен, как я могу это реализовать.
приведенный ниже код-это мой список строк, которые отображаются случайным образом для пользователя
private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
var list = new List<string> { "12fe", "46ge", "7uf", "15gs", "64ku", "42nt", "04bv", "07nh", "03lf", "86nj" };
var random = new Random();
for (var i = 0; i < 10; i )
{
int index = random.Next(list.Count);
listBox1.Items.Add(list[index]);
}
частная пустая кнопка 2_click(отправитель объекта, параметры события e) {
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
Комментарии:
1. Вы можете использовать
OrderBy
-> > docs.microsoft.com/en-us/dotnet/api/…2. Вам нужно удалить элементы из списка, когда вы добавляете их в поле списка
3. Опубликованный код, похоже, не имеет абсолютно никакого отношения к проблеме
Ответ №1:
Вы можете использовать OrderBy by для сортировки элемента списка и использовать SequenceEqual для сравнения двух порядков списка.
private void button2_Click(object sender, EventArgs e)
{
var list = new List<string> { "12fe", "46ge", "7uf", "15gs", "64ku", "42nt", "04bv", "07nh", "03lf", "86nj"};
var orderedList = list.OrderBy(i => i);
MessageBox.Show(orderedList.SequenceEqual(list).ToString());
}
Ответ №2:
Почему бы не использовать .Сортировать() ?
var list = new List<string> { "12fe", "46ge", "7uf", "15gs", "64ku", "42nt", "04bv", "07nh", "03lf", "86nj" };
list.Sort();
и после того, как разместите свой listBox1
Ответ №3:
Можно добавить специальную кнопку для проверки заказа; Это то, что я сделал, и это результат, в котором заказ сравнивается и отображается в окне сообщений, как вы указали в своем вопросе, со значками, добавленными для большей ясности рейтингом в окне сообщений
Я сделал программу, чтобы убедиться, и вот картинка: результат программы для проверки порядка возрастания
И это код, который я использовал, чтобы прочитать содержимое списка, а затем сравнить его со списком, чтобы проверить, в порядке возрастания
private void sort_Click(object sender, EventArgs e)
{
List<string> list = new List<string> { };
foreach (string temp in listBox1.Items)
{
list.Add(temp);
}
var ascending_order = list.OrderBy(item => item);
if (ascending_order.SequenceEqual(list))
{
MessageBox.Show("The ordering of the list is correct", "Sort result",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
else
{
MessageBox.Show("The ordering of the list is Incorrect", "Sort result", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Это мой первый ответ на этом сайте (stackoverflow)!
Комментарии:
1. спасибо за ответ,однако я хочу, чтобы ответы, введенные в 10 текстовых полях, были проверены, если они расположены в порядке возрастания.
Ответ №4:
В кнопке сортировки нажмите, возьмите все 10 текстов и поместите их в массив
var a = new [] {
textbox1.Text,
textbox2.Text,
textbox3.Text,
...
textbox10.Text
};
Теперь вы можете сортировать их с помощью обычной сортировки LINQ:
var sorted = a.ToList().Sort();
Теперь вы можете проверить, находятся ли они в том же порядке с помощью sequencequal:
var isSame = sorted.SequenceEquals(a);
Если это академическое упражнение, и вы не должны использовать такие вещи, как LINQ, я предлагаю вам подумать о создании собственной сортировки (bubblesort-простой алгоритм для написания) и вашей собственной версии SequenceEqual (используйте цикл for, чтобы пройти через два списка, проверяя, совпадают ли элементы).
Имейте в виду, что по умолчанию в C# сортировка чувствительна к регистру