【发布时间】:2015-01-22 19:26:43
【问题描述】:
假设我有以下字典:
private IDictionary<string, IPlayer> players;
其中IPlayer是一个定义如下的接口:
public interface IPlayer {
bool HasTurn { get; set; }
string Name { get; set; }
}
我正在尝试编写一种方法来查找活动玩家,即轮到的玩家,轮到它,然后将轮到字典中的下一个玩家。
到目前为止,我有这个:
private void NextTurn() {
if(!playing) return;
IPlayer actual = players.Values.First(p => p.HasTurn);
actual.HasTurn = false;
// How can I get the next player in the dictionary??
}
【问题讨论】:
-
Dictionary没有指定任何顺序,所以这里没有下一个玩家这样的东西。 -
字典中没有“下一个”的概念——它在逻辑上是无序的。如果你想要一个特定的订单,你应该使用不同的集合类型。
-
@MatiCicero:仅仅因为你可以迭代它,并不意味着它是有序的。
-
把属性 TurnNumber 添加到你的界面怎么样?
-
我认为您确实需要澄清您在这里实际想要实现的目标。我不知道哪种(回合制)游戏没有明确的轮流顺序。你似乎需要一个有序的列表,这样你就不会让已经转弯的玩家回头。也许您根本不需要字典,但最好使用
List<IPlayer>?或者如果你真的需要字典,那么两者都有。
标签: c# .net list dictionary