使用LINQ通过条件语句循环返回字符串列表



我有一个名为Skill的类,我通过一个参数收到了它的列表,我需要通过具有一些规则的LINQ创建一个字符串列表。

我的班级

public class Skill {
public int id {get;set;}
public int year {get;set;}
public int xp {get;set;}
}

伪数据:

var skills = new List<Skill>(){
new Skill() { id=1, year = 9, xp = 95 } ,
new Skill() { id=2, year = 5 } ,
};

规则://一年最多10//xp达到最大100

我必须创建的字符串列表如下:每年10加xp直到100(如果有(

// '1-9-95'
// '1-9-96'
// '1-9-97'
// '1-9-98'
// '1-9-99'
// '1-9-99'
// '1-9-100'
// '1-10-95'
// '1-10-96'
// '1-10-97'
// '1-10-98'
// '1-10-99'
// '1-10-99'
// '1-10-100'
// '2-5'
// '2-6'
// '2-7'
// '2-8'
// '2-9'
// '2-10'

我使用for语句得到了它,但我想知道是否使用LINQ。

您需要SelectManyEnumerable.Range:

int maxYear = 10, maxXp = 100;
List<string> resultList = skills
.Where(skill => skill.year <= maxYear && skill.xp <= maxXp) // skip invalid
.SelectMany(skill => Enumerable.Range(skill.year, maxYear - skill.year + 1)
.SelectMany(y => Enumerable.Range(skill.xp, maxXp - skill.xp + 1)
.Select(xp => $"{skill.id}-{y}-{xp}")))
.ToList();

.NET Fiddle:https://dotnetfiddle.net/c80wJs

我想我忽略了";(如果有的话(";,所以你只想列出xp(如果可用(:

int maxYear = 10, maxXp = 100;
List<string> resultList = skills
.Where(skill => skill.year <= maxYear && skill.xp <= maxXp) // skip invalid
.SelectMany(skill => Enumerable.Range(skill.year, maxYear - skill.year + 1)
.SelectMany(y => Enumerable.Range(skill.xp, skill.xp == 0 ? 1 : maxXp - skill.xp + 1)
.Select(xp => skill.xp > 0 ? $"{skill.id}-{y}-{xp}" : $"{skill.id}-{y}")))
.ToList();

.NET的小提琴(感谢Rand Random(:https://dotnetfiddle.net/06BIqg

最新更新