是否有一种简单的方法可以从特定值开始对列表进行排序?
A B C D E F
所以我们可以从传入的值开始说'C'
C D E F A B
我想优化一个时隙列表,最好从开始时间对顺序进行排序,这样就不需要迭代它不需要的所有时间。
答案 0 :(得分:0)
您可以使用:
ArrayList.Sort(int index, int count, IEqualityComparer comparer)
此方法使用指定的比较器对ArrayList中的一系列元素中的元素进行排序。
<强>参数强>
<强>索引强>
类型:System.Int32要排序的范围的从零开始的索引。
<强>计数强>
输入:System.Int32
要排序的范围的长度。
<强>比较器强>
类型:System.Collections.IComparer要使用的IComparer实现 在比较元素时。
-OR -
使用IComparable的空引用(在Visual Basic中为Nothing) 每个元素的实现。
这里有一个例子说明如何使用它。
如果您不知道如何实施Equality比较器,您也可以检查post
更新:
从您的阵列:A B C D E F
假设它在这个对象中并且它被实例化:
List<string> array;
所以你可以这样做:
public List<string> foo(List<string> array, int i) {
array.Sort(i, array.size() - i, null);
List<string> aux = array.Skip(i).Take(array.Size() - i );
aux.AddRange(array.Take(i));
return aux;
}
你这样称呼它:
List<string myNewArray = foo(array, 2);
答案 1 :(得分:0)
static void Main(string[] args)
{
char[] z = new char[] { 'B', 'C', 'F', 'A', 'D', 'E' };
Array.Sort(z);
char[] x,y;
Split<char>(z, 2, out x, out y);
char[] combined = y.Concat(x).ToArray ();
}
public static void Split<T>(T[] array, int index, out T[] first, out T[] second)
{
first = array.Take(index).ToArray();
second = array.Skip(index).ToArray();
}