2016-04-19 11 views
0

スコアを計算する方法が1つあります。単純化:Linq one複数リストの結果

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 

はどのように3つのリストのそれぞれの組み合わせを決定し、最高のスコアを決定するためにSelectでなければなりませんか?私は、LINQクエリの構文はより明確だと思います。この場合

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

あなたは同じインデックスによって測定しようとしていますか?すべての3つのリストの中で最も高い得点を測定しますか? あなたのケースを詳細に記入してください – shirbr510

+0

あなたが必要とするのは、リスト内のすべての値の組み合わせである列挙型を生成するメソッドです。単純な 'Select'の後に' Max'を続けてください。その方法を書いてください - アルゴリズムを理解してください(ヒント:ネストされたループはうまくいくかもしれません)。 – Luaan

+1

'MaxScore = Values1.SelectMany(x => Values2.SelectMany(y => Values3.Select(z => GetScore(x、y、z)))))Max();'を試してください。 – Enigmativity

答えて

1

私のコメントで提案を1として、あなたはこれを行うことができます。

int MaxScore = 
    Values1 
     .SelectMany(x => 
      Values2 
       .SelectMany(y => 
        Values3 
         .Select(z => 
          GetScore(x, y, z)))) 
     .Max(); 
6

:私はそのようなことを考えました。

var data = from v1 in Values1 
      from v2 in Values2 
      from v3 in Values3 
      select GetScore(v1, v2, v3); 
var max = data.Max(); 
関連する問題