Vb.net / C# — список сортировки / массив, начинающийся со средней точки

Существует ли простой способ сортировки списка, начинающегося с определенного значения?

A B C D E F

Таким образом, мы можем начать с переданного значения say ‘C’

C D E F A B

Я хочу оптимизировать список временных интервалов, и лучше всего отсортировать порядок от начального времени, чтобы ему не нужно было повторять все времена, когда это не нужно.

2 ответа

  1. Вы могли бы использовать:

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

    Этот метод сортирует элементы в диапазоне элементов в ArrayList с помощью указанного компаратора.

    Параметры

    индекс

    Тип: System.Int32 нулевой начальный индекс диапазона для сортировки.

    рассчитывать

    Тип: System.Int32

    Длина диапазона для сортировки.

    comparer

    система типов.Коллекции.IComparer используемая реализация IComparer
    при сравнении элементов.

    -или-

    Нулевая ссылка (Nothing в Visual Basic) для использования IComparable
    реализация каждого элемента.

    Здесь есть пример, объясняющий, как его использовать.

    список ArrayList.Метод Сортировки

    Если вы не знаете, как реализовать компаратор равенства вы можете проверить этот пост тоже

    Обновить:

    Из массива: 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);
    
  2.     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();
        }