按给定起始整数对整数数组进行排序

3

我有一个数组:

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

我希望能够按照给定值对数组进行排序,并使其余部分按原始顺序排序。
假设我想按值为7的方式开始对数组进行排序。那么排序后的数组将按以下顺序排列:
7, 10, 1, 4

如果以值4开始,排序后的数组将是以下顺序:
4, 7, 10, 1

3个回答

3

如何:

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));

你可以在数组上使用 lambda 值的 .Where 和 .OrderBy 方法吗? - Travis J
1
@TravisJ:当然,int[]IEnumerable<int>。编译器将使用 Enumerable 类中的 IEnumerable<T> 上的 LINQ to Objects 扩展方法。 - Ani
@Tigran:这真的不清楚,因为提供的数组已经排序了。我明白你的意思。让我们等待OP的澄清。 :) - Ani
哦,太酷了,我不知道那个 :) 我以为这些运算符只适用于建模对象,但它适用于所有可枚举的对象是有道理的。 - Travis J
var orderedMonths = months.Where(x => x >= 7).Concat(months.Where(x => x < 7)); 现在我可以像这样使用它:var orderedMonths = months.Where(x => x >= DateTime.Now.Month).Concat(months.Where(x => x < DateTime.Now.Month)); 这个方法解决了问题。 - RootNode
显示剩余2条评论

0

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

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();

这应该可以让您得到所需的顺序


如果数组需要是动态的,那么制作chk1会很困难。 - Travis J
啊,我现在离编译器比较远,也不确定初始化数组的限制有多严格。 - Travis J

0

你能使用列表吗?

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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接