查找满足特定条件的类实例

时间:2016-02-17 12:46:21

标签: c# list class

我正在使用这个课程:

class player
{
    public string name;
    public int rating;
}

并希望根据我拥有的name来访问rating。类似于以下内容:"获取评级为4"或任何评级可能的玩家的名字。
名称和评级之间必然存在某种联系,因为它们属于同一类,但我不确定如何利用它。此外,如果有类实例,其中两个具有相同的评级,它将如何影响这个?

我有两个列表,一个类型'播放器'它包含类实例和类型' int'保留了我将要搜索的评分。

4 个答案:

答案 0 :(得分:4)

为了演示这是如何工作的,我们可以创建一个玩家列表:

List<player> players = new List<player>();

然后在列表中添加一些测试玩家:

players.Add(new player() { name = "Test1", rating = 1 });
players.Add(new player() { name = "Test2", rating = 1 });
players.Add(new player() { name = "Test3", rating = 2 });

现在让我们使用Linq来访问列表中的数据并选择评级为2的所有玩家并从该玩家获取名称:

var rating2Player = players.FirstOrDefault(x => x.rating == 2);
var playerName = rating2Player.name;

这样做,是搜索players列表中评级为2并且选择第一个的所有玩家(如果没有找到则为NULL)

现在让我们选择评分为1的玩家,因为我们有两个,看看会发生什么:

var rating1Players = players.Where(x => x.rating == 1);

rating1Players现在包含所有评级为1的玩家对象的列表。

要获取播放器的名称,只需在您选择的播放器实例上执行.name

答案 1 :(得分:1)

我假设Player的实例属于某种IEnumerable。那么您需要的是WhereFindAll

list.Where( x => x.rating == 4 );

精确查询取决于您之后的信息。

在您的情况下,您有一个您之后的评分列表以及一个名单。您可以简单地遍历该列表:

foreach ( int currentRating in ratingList )
{
    var playersAtSameLevel = list.Where( x => x.rating == currentRating  );
     // Add code to add these players, or their names, to whatever data structure you are using to keep them.
 }

如果您想在一个集合中使用所有相关的播放器,您还可以考虑使用Join创建更复杂的LINQ查询。

var result = from rating in ratings
             join player in players on rating equals player.rating 
             select player;  

答案 2 :(得分:0)

如果您有List<player> playersList 您可以查找符合条件的第一个元素:

player playerRated4 = playersList.Find(x => x.rating == 4); 

以上示例将返回第一个评分为4的玩家。

或满足您条件的元素列表

List<player> playersListRated4 = playersList.FindAll(x => x.rating == 4); 

以上示例将返回所有评分为4的玩家作为玩家列表

答案 3 :(得分:-3)

尝试将其放入字典中,

Dictionary<int,Player> Players,

播放器类可以包含所有信息,如名字和姓氏,字典的Int将是您的评级,这样您就可以使用字典(键值对)来获得某个评级的播放器,

Player player;
if (Players.TryGetValue(4, out player)) // Returns true when a player with rating 4 has been found.
{
    Console.WriteLine(player.name); // the player object contains all the player data.
}