Shuffle Extension Method für IList<T>
Ich schreibe momentan eine kleine Anwendung und benötige hierfür eine zufällig durcheinandergeworfene Liste. Nach einigen Recherchen nach bestehenden Shuffle Methoden, habe ich mich entschieden, für mein kleines Szenario, die von Steven Smith zu nehmen. Gekapselt in einer Extension Method kann man es einfach anwenden.
Extension Method Shuffle:
1: public static class MyExtension
2: {
3: public static void Shuffle<TSource>( this IList<TSource> source )
4: {
5: Random rnd = new Random();
6:
7: for( int i = source.Count - 1; i > 0; i-- )
8: {
9: int position = rnd.Next( i + 1 );
10: TSource value = source[ i ];
11: source[ i ] = source[ position ];
12: source[ position ] = value;
13: }
14: }
15: }
Anwendung:
1: List<string> list = new List<string> { "Eins", "Zwei", "Drei", "Vier", "Fünf", "Sechs" };
2:
3: for( int i = 0; i < list.Count; i++ )
4: {
5: Console.WriteLine( list[ i ] );
6: }
7:
8: list.Shuffle();
9:
10: for( int i = 0; i < list.Count; i++ )
11: {
12: Console.WriteLine( list[ i ] );
13: }
Möchte man das ganze mit einem besseren Zufallszahlengenerator ausstatten, so kann man System.Security.Cryptography.RNGCryptoServiceProvider benutzen.
Wie immer gilt, dieser Code ist nur ein Beispiel. Bei Schäden wird keinerlei Haftung übernommen. Benutzung auf eigene Gefahr!