Vb.net / C# - 从中​​间点开始排序列表/数组

时间:2016-09-28 19:38:09

标签: c# vb.net list sorting sql-order-by

是否有一种简单的方法可以从特定值开始对列表进行排序?

A B C D E F

所以我们可以从传入的值开始说'C'

C D E F A B

我想优化一个时隙列表,最好从开始时间对顺序进行排序,这样就不需要迭代它不需要的所有时间。

2 个答案:

答案 0 :(得分:0)

您可以使用:

ArrayList.Sort(int index, int count, IEqualityComparer comparer)

此方法使用指定的比较器对ArrayList中的一系列元素中的元素进行排序。

  

<强>参数

     

<强>索引

     

类型:System.Int32要排序的范围的从零开始的索引。

     

<强>计数

     

输入:System.Int32

     

要排序的范围的长度。

     

<强>比较器

     

类型:System.Collections.IComparer要使用的IComparer实现   在比较元素时。

     

-OR -

     

使用IComparable的空引用(在Visual Basic中为Nothing)   每个元素的实现。

这里有一个例子说明如何使用它。

ArrayList.Sort Method

如果您不知道如何实施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();
    }