Сортировать целочисленный массив по заданному начальному целому числу - PullRequest
3 голосов
/ 26 декабря 2011

У меня есть массив:

int[] months = new int[4] {1, 4, 7, 10};

Я бы хотел отсортировать массив, начиная с заданного значения, и отсортировать оставшуюся часть массива в исходном порядке.

Допустим, я хочу начать сортировку массива по значению 7. Отсортированный массив будет иметь следующий порядок:

7, 10, 1, 4

Или, начиная со значения 4, отсортированный массив будет порядка
4, 7, 10, 1

Ответы [ 3 ]

3 голосов
/ 26 декабря 2011

Как насчет:

var orderedMonths = months.Where(x => x >= 7)
                          .OrderBy(x => x)
                          .Concat(months.Where(x => x < 7));

Обратите внимание, что это будет означать, что элементы «остальной части массива» будут в порядке появления, а не в порядке возрастания чисел. Если бы вы имели в виду последнее (т.е. отсортировать оба «сегмента» численно), я бы сделал:

var orderedMonths = months.OrderBy(x => x < 7) // false comes before true
                          .ThenBy(x => x);

С другой стороны, если вы хотите отсортировать оба сегмента по порядку появления, я бы сделал:

var orderedMonths = months.GroupBy(x => x < 7)
                          .OrderBy(group => group)
                          .SelectMany(x => x);

(или)

var orderedMonths = months.Where(x => x >= 7)
                          .Concat(months.Where(x => x < 7));
0 голосов
/ 26 декабря 2011

Можете ли вы использовать список?

int NumberToBeFound = 7;
int IndexOfNumber = -1;
for(int i=0;i<months.count;i++){
  if(months[i] == NumberToBeFound){
    IndexOfNumber = i;
    break;
  }
}
List<int> Sorted = new List<int>();
for(int i = IndexOfNumber; i < months.count;i++){
  Sorted.Add(months[i]);
}
for(int i = 0; i < IndexOfNumber; i++){
  Sorted.Add(months[i]);
}
months = Sorted.ToArray();
0 голосов
/ 26 декабря 2011

Предполагая, что это ваш отсортированный массив int, вы могли бы

int[] months = new int[4] { 1, 4, 7, 10 };
int value = 10; 
int[] chk1 = new int[4];
chk1 = months.SkipWhile(a => a != value).
                Concat(months.TakeWhile(a => a != value)).ToArray();

Это должно получить вам необходимый заказ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...