gpt4 book ai didi

c# - 使用 LINQ 洗牌

转载 作者:太空狗 更新时间:2023-10-29 22:03:19 26 4
gpt4 key购买 nike

我正在尝试编写一个简单的纸牌游戏。为了想出一个好的洗牌算法,我遇到了 Jeff Atwood 的 post关于编码恐怖。

但是,当我在调用构造函数后查看对象的内容时,它们并没有被打乱。

这是我尝试使用 Jeff 的解决方案:

class MainDeck : List<Card>
{
public MainDeck()
{
this.Add(new Card(1, "Hearts"));
this.Add(new Card(2, "Hearts"));
this.Add(new Card(3, "Hearts"));
...

this.OrderBy(a => Guid.NewGuid());
}
}

这是卡片的代码:

class Card
{
string suit;
int value;

public Card(int value, string suit)
{
this.value = value;
this.suit = suit;
}

bool isFaceCard()
{
if (value >= 11 || value == 1)
return true;
else
return false;
}

public override string ToString()
{
return (value +", " + suit);
}
}

我应该更改什么以使洗牌工作?

最佳答案

LINQ 方法不会改变现有集合。所以这条语句什么都不做:this.OrderBy(a => Guid.NewGuid());另外,我很确定你不能分配给 this , 所以你要么不继承 List<T> (这很好),或者做这样的事情:

var sorted = this.OrderBy(a => Guid.NewGuid()).ToList();
this.Clear();
this.AddRange(sorted);

也看看这个SO answer , 有更正确的洗牌算法。

关于c# - 使用 LINQ 洗牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19201489/

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