Метод перемешивания (перетасовки) всех карт - C#
Формулировка задачи:
Метод перезаписывает случайные ячейки из первого в новый массив. А затем копирует его в старый.
Последний номер постоянно null. В чем ошибка?
public void Shuffle()
{
Random r = new Random();
string []NewCardDeck = new string[length];
for (int i = 0; i < length; ++i)
{
string sCard = MasCardDeck[r.Next(0, length - 1)];
while (NewCardDeck.Contains(sCard))
{
sCard = MasCardDeck[r.Next(0, length - 1)];
}
NewCardDeck[i] = sCard;
}
NewCardDeck.CopyTo(MasCardDeck, 0);
}Решение задачи: «Метод перемешивания (перетасовки) всех карт»
textual
Листинг программы
public static class IEnumerableExtensions
{
private static Random rnd = new Random();
public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> sequence)
{
return sequence.OrderBy(item => rnd.Next());
}
public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> sequence, Func<int> random)
{
return sequence.OrderBy(item => random());
}
}
class Program
{
static void Main(string[] args)
{
var rnd = new Random();
var arr = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var shuffled1 = arr.Shuffle().ToArray();
var shuffled2 = arr.Shuffle(rnd.Next).ToArray();
}
}