159 votes

Ajouter un nouvel élément dans un tableau existant en c#.net

Comment ajouter un nouvel élément dans un tableau de chaînes existant en C#.net ?

J'ai besoin de préserver les données existantes.

6voto

stackuser83 Points 160

Si vous travaillez beaucoup avec des tableaux et non des listes pour une raison ou une autre, cette méthode générique de retour typée générique Add pourrait aider

    public static T[] Add<T>(T[] array, T item)
    {
        T[] returnarray = new T[array.Length + 1];
        for (int i = 0; i < array.Length; i++)
        {
            returnarray[i] = array[i];
        }
        returnarray[array.Length] = item;
        return returnarray;
    }

5voto

Toutes les réponses proposées font la même chose que ce qu'elles prétendent vouloir éviter, à savoir créer un nouveau tableau et y ajouter une nouvelle entrée, mais avec une surcharge supplémentaire. LINQ n'est pas magique, la liste de T est un tableau avec un espace tampon avec un espace supplémentaire pour éviter de redimensionner le tableau interne lorsque des éléments sont ajoutés.

Toutes les abstractions doivent résoudre le même problème, créer un tableau sans emplacements vides qui contient toutes les valeurs et les retourner.

Si vous avez besoin de flexibilité et que vous pouvez créer une liste suffisamment grande que vous pouvez utiliser pour passer, faites-le. Sinon, utilisez un tableau et partagez cet objet à sécurité thread. De plus, le nouveau Span permet de partager les données sans avoir à copier les listes.

Pour répondre à la question :

Array.Resize(ref myArray, myArray.Length + 1);
data[myArray.Length - 1] = Value;

3voto

Axxelsian Points 474

L'utilisation d'une liste serait votre meilleure option pour la gestion de la mémoire.

2voto

string str = "string ";
List<string> li_str = new List<string>();
    for (int k = 0; k < 100; i++ )
         li_str.Add(str+k.ToString());
string[] arr_str = li_str.ToArray();

2voto

William Points 707

Et si vous utilisiez une méthode d'extension ? Par exemple :

public static IEnumerable<TSource> Union<TSource>(this IEnumerable<TSource> source, TSource item)
{
    return source.Union(new TSource[] { item });
}

par exemple :

string[] sourceArray = new []
{
    "foo",
    "bar"
}
string additionalItem = "foobar";
string result = sourceArray.Union(additionalItem);

Notez que cela imite le comportement de l'extension Uniion de Linq (utilisée pour combiner deux tableaux en un nouveau), et nécessite la bibliothèque Linq pour fonctionner.

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