Mescola una lista in C#
-
Mescola una lista con Linq in
C#
-
Mescola una lista con l’algoritmo di riproduzione casuale di Fisher-Yates in
C#
In questo tutorial, discuteremo i metodi per mescolare una lista in C#.
Mescola una lista con Linq in C#
La query integrata nel linguaggio o Linq
fornisce un modo per integrare la funzionalità delle query in C#. Linq fornisce funzionalità proprio come SQL in C#. Possiamo usare Linq per randomizzare una lista. Il seguente esempio di codice ci mostra come possiamo mescolare una lista con Linq in C#.
using System;
using System.Collections.Generic;
using System.Linq;
namespace shuffle_list {
class Program {
static void Main(string[] args) {
List<int> list1 = new List<int>() { 1, 2, 3, 4, 5 };
var rnd = new Random();
var randomized = list1.OrderBy(item => rnd.Next());
foreach (var value in randomized) {
Console.WriteLine(value);
}
}
}
}
Produzione:
1 4 5 3 2
Abbiamo prima inizializzato la lista list1
e poi mescolata la lista list1
con la funzione random.next()
e la funzione OrderBy()
di Linq in C#. Il metodo sopra può essere utilizzato anche per mescolare una lista di oggetti in C#. L’esempio di codice seguente mostra come mescolare una lista di oggetti con Linq in C#.
using System;
using System.Collections.Generic;
using System.Linq;
namespace shuffle_list {
public class Person {
string name;
public Person(string name) {
Name = name;
}
public string Name {
get => name;
set => name = value;
}
}
class Program {
static void Main(string[] args) {
List<Person> list1 = new List<Person>();
list1.Add(new Person("Person 1"));
list1.Add(new Person("Person 2"));
list1.Add(new Person("Person 3"));
list1.Add(new Person("Person 4"));
list1.Add(new Person("Person 5"));
var rnd = new Random();
var randomized = list1.OrderBy(item => rnd.Next());
foreach (var value in randomized) {
Console.WriteLine(value.Name);
}
}
}
}
Produzione:
Person 5 Person 2 Person 1 Person 3 Person 4
Abbiamo mescolato una lista di oggetti della classe Person
con Linq in C#.
Mescola una lista con l’algoritmo di riproduzione casuale di Fisher-Yates in C#
L ‘algoritmo shuffle di Fisher-Yates mescola una struttura dati finita in C#. L’algoritmo di riproduzione casuale di Fisher-Yates fornisce un mescolamento imparziale in C#. Memorizza sequenzialmente ogni elemento dell’lista in un indice casuale all’interno dell’lista. Il seguente esempio di codifica ci mostra come mescolare una lista con l’algoritmo di riproduzione casuale di Fisher-Yates in C#.
using System;
using System.Collections.Generic;
using System.Linq;
namespace shuffle_list {
static class ExtensionsClass {
private static Random rng = new Random();
public static void Shuffle<T>(this IList<T> list) {
int n = list.Count;
while (n > 1) {
n--;
int k = rng.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
}
class Program {
static void Main(string[] args) {
List<int> list1 = new List<int>() { 1, 2, 3, 4, 5 };
list1.Shuffle();
foreach (var value in list1) {
Console.WriteLine(value);
}
}
}
}
Produzione:
5 1 4 3 2
Abbiamo mescolato una lista di interi list1
con l’algoritmo di shuffle di Fisher-Yates in C#. Abbiamo creato un metodo di estensione per implementare l’algoritmo di Fisher-Yates in C#. Per creare un metodo di estensione, abbiamo dovuto definire la funzione Shuffle()
in un’altra classe static
chiamata ExtensionClass
. Lo stesso algoritmo può essere utilizzato anche per mescolare una lista di oggetti, come dimostrato nei codici seguenti.
using System;
using System.Collections.Generic;
using System.Linq;
namespace shuffle_list {
public class Person {
string name;
public Person(string name) {
Name = name;
}
public string Name {
get => name;
set => name = value;
}
}
static class ExtensionsClass {
private static Random rng = new Random();
public static void Shuffle<T>(this IList<T> list) {
int n = list.Count;
while (n > 1) {
n--;
int k = rng.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
}
class Program {
static void Main(string[] args) {
List<Person> list1 = new List<Person>();
list1.Add(new Person("Person 1"));
list1.Add(new Person("Person 2"));
list1.Add(new Person("Person 3"));
list1.Add(new Person("Person 4"));
list1.Add(new Person("Person 5"));
list1.Shuffle();
foreach (var value in list1) {
Console.WriteLine(value.Name);
}
}
}
}
Produzione:
Person 1 Person 4 Person 2 Person 5 Person 3
Abbiamo mescolato una lista di oggetti della classe Person
con l’algoritmo di Fisher-Yates in C#. Abbiamo creato un metodo di estensione per implementare l’algoritmo di Fisher-Yates in C#. Per creare un metodo di estensione, abbiamo dovuto definire la funzione Shuffle()
in un’altra classe static
chiamata ExtensionClass
.
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
LinkedIn