Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sort an integer array by given starting integer

I have an array:

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

I would like to sort the array starting by the given value and sort the rest of the array in the original order.

Let's say I want to start sorting the array by a value of 7. The sorted array would be then in order of:

7, 10, 1, 4

Or starting with a value 4 the sorted array would be an order of
4, 7, 10, 1

like image 288
RootNode Avatar asked Mar 17 '26 14:03

RootNode


1 Answers

How about:

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

Note that this will mean that the elements of the "rest of the array" will be in order of appearance rather than increasing numeric order. If you meant the latter (i.e. sort both 'segments' numerically) , I would do:

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

On the other hand, if you want to sort both segments by order of appearance, I would do:

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

(or)

var orderedMonths = months.Where(x => x >= 7)
                          .Concat(months.Where(x => x < 7));
like image 70
Ani Avatar answered Mar 19 '26 02:03

Ani



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!