Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre à l'essai
    [langage] redimensionner un tableau quelconque.
    Bonsoir à tous

    Je me posais une question

    Est-il possible de redimensionner un tableau quelconque en C#.


    Merci pour vos réponses.

  2. #2
    Membre éclairé
    Tu peux. La fonction Array.Resize le fait sur les tableaux a 1 dimension. Pour des tableaux a n dimension, la documentation propose une fonction.
    Cf documentation
    Mais si tu dois souvent redimensionner un tableau, autant utiliser une liste ou autre chose.
    " Entre le Savoir et le Pouvoir, il y a le Vouloir "

    Desole pour les accents, je suis en QWERTY...

  3. #3
    Membre à l'essai
    Citation Envoyé par nouanda Voir le message
    Tu peux. La fonction Array.Resize le fait sur les tableaux a 1 dimension. Pour des tableaux a n dimension, la documentation propose une fonction.
    Cf documentation
    Mais si tu dois souvent redimensionner un tableau, autant utiliser une liste ou autre chose.
    Merci je viens de faire un essai et ça marche.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    string[] tableau = { "Un", "deux", "trois", "quatre"};
     
    Array.Resize(ref tableau, tableau.Length * 2);
     
    tableau[4] = "cinq";
    tableau[5] = "six";
    tableau[6] = "sept";
    tableau[7] = "huit";


    C'était juste à titre d'information, puisque j'utilise déjà List<> régulièrement. Par ailleurs je me suis toujours demandé pourquoi on appelait ça une liste alors que réellement ce n'en est pas une et que cela serait plutôt un vecteur.

  4. #4
    Membre chevronné
    En fait c'est un peu plus subtil que ça. Ce n'est pas un vrai resize, il y aura en fait l'allocation mémoire d'un nouveau tableau et une copie des éléments sur ce second tableau. La variable est passée en référence pour recevoir l'adresse du nouveau tableau. Les List<T> elles-même fonctionnent avec un tableau interne et font un réallocation et copie pour augmenter la capacité lorsque la taille atteint la capacité actuelle et qu'on veut insérer un nouvel élément.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    static void Main(string[] args)
    {
        var array = new[] { 1, 2, 3 };WriteLine);
        var refCopy = array;
        Console.WriteLine($"array==refCopy:{ReferenceEquals(array, refCopy)}");
        Array.Resize(ref array, array.Length * 2);
        Console.WriteLine($"array==refCopy:{ReferenceEquals(array, refCopy)}");
        Console.ReadLine();
    }

  5. #5
    Membre à l'essai
    Oui c'est ce que j'ai vu dans le code source. La capacité de départ est nulle si on utilise le constructeur List<>(). Dès l'ajout d'un premier élément, la capacité du tableau interne passe à 4. Et à chaque fois que l'on dépasse la capacité (en ajoutant des éléments), un nouveau tableau avec une capacité double est créé, on recopie le contenu dans le nouveau tableau.

###raw>template_hook.ano_emploi###