C# 按给定的起始整数对整数数组排序

C# 按给定的起始整数对整数数组排序,c#,algorithm,sorting,C#,Algorithm,Sorting,我有一个数组: int[] months = new int[4] {1, 4, 7, 10}; 我想从给定的值开始对数组进行排序,然后按原始顺序对数组的其余部分进行排序 假设我想开始按7的值对数组进行排序。排序后的数组将按以下顺序排列: 7, 10, 1, 4 或者以值4开始,排序数组的顺序为 4,7,10,1怎么样: var orderedMonths = months.Where(x => x >= 7) .OrderBy

我有一个数组:

int[] months = new int[4] {1, 4, 7, 10};
我想从给定的值开始对数组进行排序,然后按原始顺序对数组的其余部分进行排序

假设我想开始按
7
的值对数组进行排序。排序后的数组将按以下顺序排列:

7, 10, 1, 4
或者以值
4
开始,排序数组的顺序为
4,7,10,1

怎么样:

var orderedMonths = months.Where(x => x >= 7)
                          .OrderBy(x => x)
                          .Concat(months.Where(x => x < 7));
var orderedMonths=months。其中(x=>x>=7)
.OrderBy(x=>x)
.Concat(月数,其中(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.OrderBy(x=>x<7)//假在真之前
.ThenBy(x=>x);
另一方面,如果要按外观顺序对两个段进行排序,我将执行以下操作:

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.GroupBy(x=>x<7)
.OrderBy(组=>组)
.SelectMany(x=>x);
(或)

var orderedMonths=months。其中(x=>x>=7)
.Concat(月数,其中(x=>x<7));

假设这是您的排序整数数组,您可以

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();
这将为您提供所需的订单

您可以使用列表吗

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();
int NumberToBeFound=7;
int IndexOfNumber=-1;

对于(int i=0;iYou可以在数组上使用.Where和.OrderBy和lambda值?@TravisJ:当然,可以使用
int[]
是一个
IEnumerable
。然后,编译器将在
Enumerable
类中的
IEnumerable
上使用LINQ to Objects扩展方法。@Ani:sems告诉我算法不正确,因为如果查看OP提供的规范,您将看到排序不是由
提供的值进行的,而是by
索引数组中该值的
。换句话说,通过
=7
选择某个值是不正确的。@Tigran:这两种方法都不清楚,因为提供的数组已经排序。我理解你的意思。让我们等待OP的澄清。:)@Ani Oh cool,我不知道:)我以为那些操作符只适用于建模对象,但它们适用于所有可枚举的对象是有道理的。但是,如果数组需要动态,就chk1而言,这很难做到。啊,我不接近编译器,也不确定启动数组的限制有多严格。