C #: Bonne / meilleure implémentation de la méthode d'échange
J'ai lu ce post sur la carte de brassage et dans de nombreux mélanges et algorithmes de tri, vous devez échanger les deux éléments dans une liste ou d'une matrice. Mais ce qui fait un bon et efficace méthode d'échange?
Disons que pour un T[]
et pour un List<T>
. Comment feriez-vous mieux de mettre en œuvre une méthode qui swaps de deux articles dans ces deux?
Swap(ref cards[i], ref cards[n]); //How is Swap implemented?
source d'informationauteur Svish | 2009-02-16
Vous devez vous connecter pour publier un commentaire.
Bien, le code que vous avez posté (
ref cards[n]
) ne peut travailler qu'avec un tableau (pas une liste), mais vous pouvez utiliser tout simplement (oùfoo
etbar
sont les deux valeurs):Ou peut-être (si vous voulez atomique):Personnellement, je ne pense pas que je me donnerais la peine avec une méthode d'échange, bien - juste le faire directement, ce qui signifie que vous pouvez utiliser (pour une liste ou un tableau):
Si vous avez vraiment envie d'écrire une méthode d'échange qui a travaillé sur une liste ou un tableau, que vous avez à faire quelque chose comme:
(il serait trivial de faire ce générique) - toutefois, l'original "inline" version (c'est à dire pas une méthode) qui travaille sur un tableau sera plus rapide.
Utilisation:
Je ne savais pas que j'étais dans le C# section. C'est du code C++, mais il devrait avoir la même idée de base. Je crois ^ XOR est en C#. Il ressemble au lieu de
&
vous pouvez avoir besoin "ref"(?). Je ne suis pas sûr.Un bon swap est un endroit où vous n'avez pas échanger le contenu. En C/C++ ce serait semblable à l'échange de pointeurs au lieu de l'échange le contenu. Ce style de l'échange est rapide et est livré avec une exception de garantie. Malheureusement, mon C# est trop rouillé pour me permettre de le mettre dans le code. Pour les types de données simples, ce style ne vous donne pas beaucoup. Mais une fois que vous êtes habitué, et d'avoir à traiter avec les plus grands (et plus complexe) des objets, il peut sauver votre vie.
Quoi à ce sujet?
C'est un générique de la mise en œuvre d'une méthode d'échange. L'équipe de créer une version compilée SEULEMENT pour vous fermé les types de sorte que vous n'avez pas à vous soucier des séances!
HTH
Lorenzo
Pour quiconque vous demandez-vous, l'échange peut également être fait aussi avec les méthodes d'Extension (.NET 3.0 et versions plus récentes).
En général, il ne semble pas être possible de dire que les méthodes d'extension "cette" valeur ref, si vous avez besoin de le retourner et de remplacer l'ancienne valeur.
Cette méthode d'extension peut être ensuite utilisé comme ceci: