我将用一个例子来解释我的问题:我想将列表(0,1,2,6,7)排序到列表(6,7,0,1,2),所以我在列表,也就是说大于4应该按升序排序,从最小的开始,然后是小于4的所有内容,按升序排列,从最小的开始。
答案 0 :(得分:2)
制作这个比较器:
public class MyComparer : IComparer<int>
{
public int Divider { get; set; }
public MyComparer(int divider) { Divider = divider; }
public int Compare(int x, int y)
{
if (x < Divider && y > Divider) return 1;
if (x > Divider && y < Divider) return -1;
return x.CompareTo(y);
}
}
然后你可以运行这段代码:
List<int> list = new List<int> { 0, 1, 2, 6, 7 };
list = list.OrderBy(i => i, new MyComparer(4)).ToList();
请注意,如果问题应该是4
组中的第一个条目或6,7
组中的最后一个条目,则问题中您不希望如何处理值0,1,2
本身。根据您的预期,上述每条if()
行的不等式比较之一应包含=
。
答案 1 :(得分:1)
可以使用linq:
using System;
using System.Collections.Generic;
using System.Linq;
internal class Program
{
static void Main(string[] args)
{
List<int> myList = new List<int> { 0, 1, 2, 6, 7 };
var bigger4 = myList // from myList
.Where(item => item > 4) // filter all bigger 4
.OrderBy(i => i) // order them by value ascending
.ToList(); // make list to allow AddRange() later
// I am putting 4rs into this list
var smaller5 = myList // from myList
.Where(item => item <= 4) // filter all smalller equal 4
.OrderBy(i => i); // order them by value ascending
bigger4.AddRange(smaller5); // add to first list
// output as string with , between values:
Console.WriteLine(string.Join(",", bigger4)); // which smaller5 added into bigger4
Console.ReadLine();
}
}
或者将它放在Extensionmethod中:
internal static class SillyThing
{
static public IList<int>
SortBigger_K_InFrontAnscendingThenAddSmallerEqual_K_Ascending(
this IList<int> list, int K)
{
var biggerK = list
.Where(item => item > K) // filter all bigger K
.OrderBy(i => i) // order them by value ascending
.ToList(); // make list to allow AddRange() later
// I am putting 4rs into this list
var smallerK = list
.Where(item => item <= K) // filter all smalller equal K
.OrderBy(i => i); // order them by value ascending
biggerK.AddRange(smallerK); // add to first list
return biggerK;
}
}
并称之为:
var newList = "1,2,3,4,5,6,7,8,9,0,12,14,16,17,192,222,66,44,22,11".Split(',')
.Select(n => int.Parse(n))
.ToList();
Console.WriteLine(
string.Join(",", newList.
SortBigger_K_InFrontAnscendingThenAddSmallerEqual_K_Ascending(70)));
Console.ReadLine();
免责声明:
@JoelCoehoorn的方法是可重用的,然后使用特定的SILLY扩展方法。