2011-10-27 75 views
4

一個地方我我試圖解決與LINQ下面的問題中(已經與正常的編程解決它):凡在LINQ

http://projecteuler.net/problem=43

目前,我有以下幾點:

class Program 
{ 


    static void Main(string[] args) 
    { 
     var range0 = Enumerable.Range(0, 3); 
     var range1 = Enumerable.Range(0, 3); 
     var range2 = Enumerable.Range(0, 3); 


     var combo = from val0 in range0 
        from val1 in range1 
        from val2 in range2 
        where (val0 + val1 + val2 == 3) 
        select new { value = val0.ToString() + val1.ToString() + val2.ToString() }; 

     foreach(var value in combo) 
     { 
      Console.WriteLine(value.value); 
     } 

     Console.ReadLine(); 
    } 
} 

我最終希望擴展此查詢以獲取9個值,但是目前,我的問題是,如何檢查where子句中每個值是否不同? val0 val1和val3必須不同。

回答

7

如何

where new List<int> { val0, val1, val2 }.Distinct().Count() == 3 
    && (val0 + val1 + val2 == 2) 
+0

Arrrgh - 打我吧:) –

+0

正確,但有沒有辦法做到這一點,而不知道類型是int? – NomenNescio

+0

@NomenNescio - 你可能只需要使用'object',因爲它無關緊要,你只需要計算不同的值 –

0
  from val0 in range0 
      from val1 in range1 
      where val1 != val0 
      from val2 in range2 
      where val2 != val1 && val2 != val0 && (val0 + val1 + val2 == 2) 
      select new { value = val0.ToString() + val1.ToString() + val2.ToString() }; 
1

把值列表,得到不同的值,並檢查你有多少條目。

var combo = from val0 in range0 
       from val1 in range1 
       from val2 in range2 
       let values = new List<int>() {val0, val1, val2} 
       where (val0 + val1 + val2 == 2) && values.Distinct().Count() == 3 
       select new { value = val0.ToString() + val1.ToString() + val2.ToString() };