2 votes

Déplacement d'un élément dans un tableau avec C#

Existe-t-il un moyen de déplacer des éléments à l'intérieur d'un tableau ? Par exemple, il est possible de déplacer des éléments à l'intérieur d'un tableau :

int[] myArray = {1,2,3,4};

Le deuxième élément devient le dernier :

int[] myArray = {1,3,4,2};

P.S. : Non, ce n'est pas un devoir. Je peux penser à au moins une solution, mais elle nécessite une mise en œuvre assez difficile :

  • Nous commençons par enregistrer le deuxième élément dans Int
  • nous supprimons alors cet élément du tableau
  • puis nous ajoutons un nouvel élément à la toute fin de mon tableau

Y a-t-il une autre façon (plus facile) de procéder ?

8voto

itsme86 Points 6733

Il n'y a pas de moyen facile de le faire en utilisant un tableau. Vous devrez parcourir le tableau en boucle en décalant chaque élément jusqu'à l'index qui se déplace, puis réinsérer cet élément à la fin. Vous pouvez toujours utiliser un List<int> pour le faire.

List<int> list = myArray.ToList();
int value = list[1];
list.RemoveAt(1);
list.Add(value);
myArray = list.ToArray();

3voto

Matzi Points 8561

Utilisation List<int> . Array n'est pas destiné à de tels mouvements de tous les éléments.

Vous pouvez également essayer d'intervertir le dernier élément et l'élément choisi, ce qui perturbera l'ordre.

1voto

SASS_Shooter Points 1148

Si le tableau a toujours une taille fixe, alors.. :

myArray = new int[4] { myArray[0], myArray[2], myArray[3], myArray[1] };

Mais s'il est de taille variable, cela devient plus délicat et il est préférable de commencer par une liste.

int lastElement = 0;
List<int> newArray = new List<int>();
for ( int index=0; index<myArray.Length; index++)
{
     if ( index == 1 ) lastElement = myArray[index];
     else newArray.Add(myArray[index]);
}
newArray.Add(lastElement);
myArray = newArray.ToArray();

1voto

anouar.bagari Points 2026
   myArray = new List<int>(myArray.Where((x, i) => (i != 1))) 
               { myArray[1] }.ToArray();

0voto

Austin Salonen Points 28057

Dans ce cas, vous pouvez utiliser la fonction XOR swap :

[Test]
public void TestSwap()
{
    int[] myArray = { 1, 2, 3, 4 };

    Console.WriteLine(string.Join(", ", myArray));

    Swap(myArray, 1, 2);
    Swap(myArray, 2, 3);

    Console.WriteLine(string.Join(", ", myArray));
}

static void Swap(int[] vals, int x, int y)
{
    vals[x] = vals[x] ^ vals[y];
    vals[y] = vals[y] ^ vals[x];
    vals[x] = vals[x] ^ vals[y];
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X