我正在尝试编写一个简单的纸牌游戏。为了提出一个好的改组算法,我遇到了Jeff Atwood在Coding Horror上的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());
}
}
这是Card的代码:
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,还有更多正确的改组算法。