gpt4 book ai didi

c# - 如何打乱或随机化链表

转载 作者:太空狗 更新时间:2023-10-30 01:31:55 25 4
gpt4 key购买 nike

在这种情况下,我试图随机化或随机化图像的链接列表,但我设置它的方式似乎不确定地继续

洗牌相当简单,你有列表,记下最后一个条目,然后取出第一个条目并将其放在列表中的随机位置,然后是下一个第一个条目,等等,直到顶部条目是您记为最后一个条目,您将该条目放在列表中的随机位置,然后列表被打乱。

这是我的代码:

class ShuffleClass
{
private LinkedList<Image> library;
private Image lastCard;
private Image topCard;
private Random rng;
private int place;
private LinkedListNode<Image> node;

public LinkedList<Image> shuffle(LinkedList<Image> library)
{
this.library = library;
lastCard = library.Last.Value;
rng = new Random();

while (library.First.Value != lastCard)
{
topCard = library.First.Value;
library.RemoveFirst();
place = rng.Next(1,library.Count+1);

if (place == library.Count)
{
library.AddBefore(library.Last, topCard);
}
else
{
node = library.Find(library.ElementAt(place));
library.AddBefore(node, topCard);
}

}
topCard = library.First.Value;
library.RemoveFirst();
place = rng.Next(0,library.Count+1);
if(place == library.Count)
{
library.AddBefore(library.Last, topCard);
}
else
{
node = library.Find(library.ElementAt(place));
library.AddBefore(node, topCard);
}
return library;
}
}

最佳答案

您可以使用 Random Class 来打乱您的列表:

public static void Shuffle()
{
Random Rand = new Random();
LinkedList<int> list = new LinkedList<int>(new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 });

foreach (int i in list)
Console.Write("{0} ", i);

Console.WriteLine();
int size = list.Count;

//Shuffle the list
list = new LinkedList<int>(list.OrderBy((o) =>
{
return (Rand.Next() % size);
}));

foreach (int i in list)
Console.Write("{0} ", i);

Console.WriteLine();
}

输出可能是这样的:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
10 2 17 7 9 15 8 14 1 12 13 16 4 18 3 5 11 20 19 6

关于c# - 如何打乱或随机化链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39285715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com