我不太了解LINQ。我发现每一个例子都过分简化,直到我不知道为什么你甚至会使用LINQ,或者太复杂,我需要已经知道LINQ如何工作以理解它。如何从linq列表字典中获取项目
所以我想知道是否以及如何使用LINQ来做这件事......在这个例子中,假设你有一个玩家类的列表,并且每个类的内部都有一个能力列表。每个技能都有等级要求。你如何使用LINQ为一组特定类选择所有等于或低于某个特定级别的能力?
Giveen这样的数据:
- 的Class1
- Ability1 - 第1级
- Ability2 - 等级5
- Ability3 - 等级9
- 的Class2
- Ability4 - 1级
- Ability5 - 第2级
- Ability6 - 等级6
- Class3的
- Ability7 - 第2级
- Ability8 - 等级4
- Ability9 - 等级6
我想要一个列表所有等级为5级或以下的Class1 & Class3的所有技能。结果应该是{Ability1,Ability2,Ability7,Ability8}。
public class Class1
{
public class Ability
{
public string Name { get; set; }
public int Level { get; set; }
}
public class PlayerClass
{
public string Name { get; set; }
public List<Ability> Abilities { get; set; }
}
public List<PlayerClass> Classes { get; set; }
public Class1()
{
PlayerClass oClass;
Classes = new List<PlayerClass>();
oClass = new PlayerClass();
oClass.Name = "Class1";
oClass.Abilities = new List<Ability>();
oClass.Abilities.Add(new Ability() { Name = "Ability1", Level = 1 });
oClass.Abilities.Add(new Ability() { Name = "Ability2", Level = 5 });
oClass.Abilities.Add(new Ability() { Name = "Ability3", Level = 9 });
Classes.Add(oClass);
oClass = new PlayerClass();
oClass.Name = "Class2";
oClass.Abilities = new List<Ability>();
oClass.Abilities.Add(new Ability() { Name = "Ability4", Level = 1 });
oClass.Abilities.Add(new Ability() { Name = "Ability5", Level = 2 });
oClass.Abilities.Add(new Ability() { Name = "Ability6", Level = 6 });
Classes.Add(oClass);
oClass = new PlayerClass();
oClass.Name = "Class3";
oClass.Abilities = new List<Ability>();
oClass.Abilities.Add(new Ability() { Name = "Ability7", Level = 2 });
oClass.Abilities.Add(new Ability() { Name = "Ability8", Level = 4 });
oClass.Abilities.Add(new Ability() { Name = "Ability9", Level = 6 });
Classes.Add(oClass);
IEnumerable<Ability> Abilities =
GetAbilitiesForClasses("Class1;Class3".Split(';'), 5);
//Abilities should contain Ability1, Ability2, Ability7, Ability8
}
public IEnumerable<Ability> GetAbilitiesForClasses
(string[] asClassNames, int iLevel)
{
// TODO: Use LINQ to return the abilities for the class names
//contained in asClassNames that are at or below level: iLevel
return null;
}
}
如果您发布的defintions(在C#),你的类的一些样本数据,你会得到更多,更快的答案。 –
LINQ很漂亮。可读性,更少的代码,更好的处理。 – BlueM
是的,你应该更具体,什么是能力(类,...) – S3ddi9