Мне нужно запустить команду, которая в строке - PullRequest
0 голосов
/ 28 марта 2020

У меня проблема с кодом.
Я хочу реализовать радикальную сортировку по числам на c#, используя ling.

Я даю в качестве входной строки и даю 0 в начале число:

            foreach(string number in numbers){<br>
               if(number.lenth > max_lenth) max_lenth = number.lenth;<br><br>

            for(int i = 0; i < numbers.lenth; i++){<br>
               while(numbers[i].length < max_lenth) numbers[i] = "0" + numbers[i];<br><br>

после этого мне нужно упорядочить по каждому числу в строке, но оно не работает с моим l oop:

        var output = input.OrderBy(x => x[0]);
        for (int i = 0; i < max_lenth; i++)
        {
            output = output.ThenBy(x => x[i]);
        }

поэтому я думаю создать строку, содержащую «input.OrderBy (x => x [0]);» и добавьте «ThenBy (x => x [i]);»
, а max_length - 1 и активируйте эту строку, которая будет моим результатом.
Как я могу это реализовать?

Я не могу используйте ling в качестве тега, потому что это мой первый пост

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Если я понимаю ваш вопрос, вы ищете решение проблемы, которую вы пытаетесь решить, используя Linq (кстати, последняя буква - Q, а не G - что, вероятно, вы не могли бы добавить тег).

Остальная часть вашего вопроса мне не совсем понятна. Я перечислил возможные решения, основанные на различных предположениях:

Я предполагаю, что ваш массив имеет тип string []. Пример:

string[] values = new [] { "708", "4012" };

Сортировка по алфавиту c порядок независимо от номера c порядок значений:

var result = values.OrderBy(value => value);

Чтобы отсортировать по числовому значению c, вы можете просто изменить делегат, используемый в предложении OrderBy, предполагая, что ваши значения достаточно малы:

var result = values.OrderBy(value => Convert.ToInt32(value));

Предположим, что ваши числа имеют произвольную длину, и вы хотите, чтобы значения в массиве были такими, какие они есть (без предваряющих нулей), и чтобы вы сортировали их в порядке целочисленных значений:

string[] values = new [] { "708", "4012" };
int maxLength = values.Max(value => value.Length);
string zerosPad = string
    .Join(string.Empty, Enumerable.Repeat<string>("0", maxLength));

var resultEnumerable = values
   .Select(value => new 
      { 
         ArrayValue = value, 
         SortValue = zerosPad.Substring(0, maxLength - value.Length) + value 
      }
   )
   .OrderBy(item => item.SortValue);

foreach(var result in resultEnumerable)
{
   System.Console.WriteLine("{0}\t{1}", result.SortValue, result.ArrayValue);
}

Результат приведенного выше кода будет выглядеть вот так:

0708 708

4012 4012

Надеюсь, это поможет!

0 голосов
/ 28 марта 2020

Попробуйте Array.Sort(x) или Array.Sort(x,StringComparer.InvariantCulture).

...