我正在使用这个课程:
class player
{
public string name;
public int rating;
}
并希望根据我拥有的name
来访问rating
。类似于以下内容:"获取评级为4"或任何评级可能的玩家的名字。
名称和评级之间必然存在某种联系,因为它们属于同一类,但我不确定如何利用它。此外,如果有类实例,其中两个具有相同的评级,它将如何影响这个?
我有两个列表,一个类型'播放器'它包含类实例和类型' int'保留了我将要搜索的评分。
答案 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。那么您需要的是Where
或FindAll
:
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.
}