我是一个尝试学习使用lambdas的初学者,
我的class Character
里面有"List<Item> inventory"
可以容纳"class Sword: Item"
和"class Shield: Item"
我希望得到List<float>
来显示每个角色的伤害。
damage
中的sum of damages
为items
inventory(swords and shields)
。
到目前为止,我知道我可以对我的角色列表中的个别角色执行此操作,并从他的项目中获得损坏的总和。
float damage = characters[0].inventory.Select(item => item.damage).Sum(dmg => dmg);
但是,当我尝试同时完成所有角色时,这不起作用。
List<float> charactersTotalDamagesFromEachCharacter = characters
.Select(character => character.inventory)
.Select(item => item)
.Select(item => item.damage)
.Sum(dmg => dmg);
我希望得到代表List<float>
的{{1}}。
答案 0 :(得分:2)
如果你想知道每个角色的总伤害,你只需要计算每个角色库存的伤害总和(顺便说一下,你可以直接求和而不选择要求和的属性并在之后调用Sum()
):
var totalDamagePerCharacter = characters.Select(c => new
{
Character = c,
TotalDamage = c.Inventory.Sum(item => item.Damage)
})
.ToList();
但是,如果您不需要知道造成损害的特定角色,并且您只想获得总损失列表,那么只需将角色投射到上面查询中的总损伤:
var listOfTotalDamages = characters.Select(
c => c.Inventory.Sum(item => item.Damage)).ToList();
答案 1 :(得分:0)
我猜你正在寻找个人伤害,这应该会给你正确的结果: -
List<float> charactersTotalDamagesFromEachCharacter = characters
.Select(x => x.inventory.Sum(z => z.damage))
.ToList();