C# как сортировать пользовательский ввод из текстового поля в порядке возрастания

#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# сортировка чувствительна к регистру