仅用于字典值的 IEnumerable 实现
IEnumerable implementation only for Dictionary values
我有一个 class,比方说 Player
,有一个名字和一些属性:
public class Players
{
public string PlayerName { get; set; }
public IList<Goal> Goals { get; set; }
...
}
我想创建一个自定义集合 class,PlayerCollection
,但使用字典而不是列表来进行更快的搜索。所以:
public class PlayersCollection
{
private readonly IDIctionary<string, Player> _players;
....
使用以玩家姓名为键的字典将使我的程序的其余部分变得更容易。
现在我想实现 IEnumerable<Player>
,以便遍历播放器 class,但我不能使用字典的枚举器,因为它是在 KeyValuePair<string, Player>
.[=16 上实现的=]
我该怎么做?
试试这个:
public class PlayersCollection : IEnumerable<Player>
{
private readonly IDictionary<string, Player> _players;
public IEnumerator<Player> GetEnumerator()
{
return _players.Select(player => player.Value).GetEnumerator();
}
}
如果您正在寻找一个可以快速搜索的集合,我建议您阅读 HashSet<T>
,它是框架的一部分。
KeyedCollection
class 非常适合您的情况。它使您可以按 属性 个集合成员进行查找。您唯一需要做的就是创建一个派生的 class,它具有 属性.
的选择器
public class PlayersCollection : KeyedCollection<string, Players>
{
protected override string GetKeyForItem(Players item)
{
return item.PlayerName;
}
}
当您获得 PlayersCollection
的枚举器时,它将是 IEnumerable<Players>
。
我有一个 class,比方说 Player
,有一个名字和一些属性:
public class Players
{
public string PlayerName { get; set; }
public IList<Goal> Goals { get; set; }
...
}
我想创建一个自定义集合 class,PlayerCollection
,但使用字典而不是列表来进行更快的搜索。所以:
public class PlayersCollection
{
private readonly IDIctionary<string, Player> _players;
....
使用以玩家姓名为键的字典将使我的程序的其余部分变得更容易。
现在我想实现 IEnumerable<Player>
,以便遍历播放器 class,但我不能使用字典的枚举器,因为它是在 KeyValuePair<string, Player>
.[=16 上实现的=]
我该怎么做?
试试这个:
public class PlayersCollection : IEnumerable<Player>
{
private readonly IDictionary<string, Player> _players;
public IEnumerator<Player> GetEnumerator()
{
return _players.Select(player => player.Value).GetEnumerator();
}
}
如果您正在寻找一个可以快速搜索的集合,我建议您阅读 HashSet<T>
,它是框架的一部分。
KeyedCollection
class 非常适合您的情况。它使您可以按 属性 个集合成员进行查找。您唯一需要做的就是创建一个派生的 class,它具有 属性.
public class PlayersCollection : KeyedCollection<string, Players>
{
protected override string GetKeyForItem(Players item)
{
return item.PlayerName;
}
}
当您获得 PlayersCollection
的枚举器时,它将是 IEnumerable<Players>
。