Linq one多个列表的结果

时间:2016-04-19 14:38:35

标签: c# linq

我有一种计算得分的方法。简化为:

public static int GetScore(int v1, int v2, char v3)
{
    //calculate score 
    return score;
}

v1v2v3是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;
            }
        }
    }
}

2 个答案:

答案 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();