我不太瞭解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