我有一种计算得分的方法。简化为:
public static int GetScore(int v1, int v2, char v3)
{
//calculate score
return score;
}
v1
,v2
和v3
是3个列表中的3个值:
List<int> Values1 = new List<int>();
List<int> Values2 = new List<int>();
List<char> Values3 = new List<char>();
//fill Values1, Values 2, Values3
Select
如何确定三个列表的每个组合并确定最高分?我想到了类似的东西:
int MaxScore = Values1.Select(x => Values2.Select(y => GetScore(x, y))).Max(); // ???
我目前的做法
int MaxScore = 0;
foreach (int x in Values1)
{
foreach (int y in Values2)
{
foreach (char z in Values3)
{
int Score = GetScore(x, y, z);
if (Score > MaxScore)
{
MaxScore = Score;
}
}
}
}
答案 0 :(得分:6)
在这种情况下,我认为LINQ Query语法更清晰。
var data = from v1 in Values1
from v2 in Values2
from v3 in Values3
select GetScore(v1, v2, v3);
var max = data.Max();
答案 1 :(得分:1)
根据我的评论中的建议,您可以这样做:
int MaxScore =
Values1
.SelectMany(x =>
Values2
.SelectMany(y =>
Values3
.Select(z =>
GetScore(x, y, z))))
.Max();