Comment créer et initialiser un tableau avec un autre tableau?
Pour créer et initialiser un tableau à un autre tableau que j'ai actuellement ce faire:
void Foo( int[] a )
{
int[] b = new int[ a.Length ];
for ( int i = 0; i < a.Length; ++i )
b[ i ] = a[ i ];
//Other code ...
}
Est-il plus court ou plus idiomatiques façon de faire cela en C#?
Il sera grand si cela peut être fait en une seule instruction, comme en C++:
vector<int> b( a );
Si cela ne peut être fait en une seule instruction, je vais prendre ce que je reçois 🙂
source d'informationauteur Ashwin Nanjappa
Vous devez vous connecter pour publier un commentaire.
J'aime l'utilisation de LINQ pour cela:
Cela étant dit, Tableau.Copier n'ont de meilleures performances, si cela va être utilisé dans une boucle serrée, etc:
Edit:
La version C#:
List<T>
est de C#équivalent àstd::vector<T>
. Le constructeur ci-dessus fonctionne avec n'importe quelIEnumerable<T>
y compris une autreList<T>
un tableau (T[]
), etc.Utilisation Tableau.Copie pour copier un tableau
Aussi essayer le défaut
Clone()
fonction qui est mise en œuvre à partir de laIClonable
interface.Clone() et ToArray() la syntaxe est agréable parce que vous n'avez pas besoin de pré-allouer un tableau de destination, mais en termes de performance, Tableau.Copier() est la méthode la plus rapide (voir avertissement ci-dessous).
La raison de Tableau.Copier() d'être si rapide, c'est qu'il n'a pas d'allouer de la mémoire. Toutefois, si vous avez besoin de vos tableaux à être copié dans une nouvelle région de la mémoire à chaque fois, alors la Matrice.Copier() n'est plus la méthode la plus rapide.
Voici mes résultats de performance:
Et voici le code que j'ai utilisé: