Перемещение элемента ArrayList в Front с сохранением порядка C # - PullRequest
4 голосов
/ 05 сентября 2010

скажем, у меня есть такой массив,

The, Quick, Brown, Fox, Jumps 

и мне нужно переместить / сдвинуть один из элементов вперед, чтобы он выглядел следующим образом

Brown, Fox, Jumps, The, Quick

Как можно отсортировать массив, как вращающаяся дверь? перемещая один элемент, а остальные следуют за ним?

Есть простой способ или я должен просто скопировать / зациклить / вырезать / скопировать?

Ответы [ 4 ]

1 голос
/ 05 сентября 2010

Вы можете использовать Array.Copy, чтобы избежать записи явных циклов.Следующий код создает новый массив вместо изменения исходного:

T[] rotate<T>(T[] a, int index)
{
    T[] result = new T[a.Length];
    Array.Copy(a, index, result, 0, a.Length - index);
    Array.Copy(a, 0, result, a.Length - index, index);
    return result;
}

public void Run()
{
    string[] words = { "The", "Quick", "Brown", "Fox", "Jumps" };
    string[] result = rotate(words, 2);
    foreach (string word in result)
    {
        Console.WriteLine(word);
    }
}
1 голос
/ 05 сентября 2010
ArrayList list = new ArrayList();
list.Add("The");
list.Add("Quick");
list.Add("Brown");
list.Add("Fox");
list.Add("Jumps");

ArrayList newList = new ArrayList();
int index = 2;
for (int i = index; i < list.Count; i++)
{
    newList.Add(list[i]);
}

for (int i = 0; i < index; i++)
{
    newList.Add(list[i]);
}

list = newList;
1 голос
/ 05 сентября 2010

см. Как сместить начало массива в C #? или

        string[] myArray = { "The", "Quick", "Brown", "Fox", "Jumps" };
        myArray = myArray.SkipWhile(t => t != "Brown").Concat(myArray.TakeWhile(t => t != "Brown")).ToArray();
1 голос
/ 05 сентября 2010

Попробуйте следующий метод

public void ShiftRevolvingDoor(ArrayList list, int count) {
  while ( count > 0 ) {
    ShiftRevolvingDoor(list);
    count--;
  }
}

public void ShiftRevolvingDoor(ArrayList list) {
  if ( list.Count < 2 ) {
    return;
  }
  int lastIndex = list.Count - 1;
  object first = list[0];
  for ( i = 0; i < lastIndex; i++) {
    list[i] = list[i+1];
  }
  list[lastIndex] = first;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...