2016-04-14 2 views
0

この質問/クイズには、インタビューで尋ねられるかもしれないものがあります。これを行う方法が見当たらない...IF文なしの試合を見つけるか?

2つの配列に乱数があり、各配列には共有する番号があります。番号を見つけ、その番号を出力します。 (注意:IFステートメントを使用しないでください)

+1

'System.Linq'名前空間の拡張メソッドを見てください。 –

答えて

1

は(手続き型ではなく)関数型プログラミングを行うためにあなたの能力です。いくつかの答えで述べたように、LINQを使って2つのリストを交差させることができます。

その他の回答は完全ではありません。あなたは、正確に一つの共通番号

  • あなたがループまたは明示せずに1つのステートメントでこれを行うべき準関数型プログラミングの精神で出力この数
  • をすべきではあり

    • を言われました条件文:

      int[] a = { 1, 2, 3 }; 
      int[] b = { 3, 4, 5 }; 
      
      Console.WriteLine(a.Intersect(b).Single()); 
      

      これは、より堅牢であることができ、例えば

      Console.WriteLine(a.Intersect(b).FirstOrDefault()); 
      

      交差点にゼロまたは複数の要素がある場合は、 と厳密には、これらは前提条件の違反を報告できません。正確に1つの一致が存在しなければなりません。

    4

    Intersectを使用してください。 LINQの質問だと思います。

    1

    よく、Intersect拡張メソッドをご覧ください。

    ここで少し例:彼らが検討している何

    int[] array1 = { 1, 2, 3 }; 
    int[] array2 = { 3, 4, 5 }; 
    
    // get the shared number(s) 
    var intersect = array1.Intersect(array2); 
    
    foreach (int val in intersect) 
    { 
        Console.WriteLine(val); 
    } 
    
    1

    私は同様の経験を持っていましたが、手続き型プログラミングを使用して、パズルを解決する方法が複数考えられるかどうかを判断しなければなりませんでした。上記のコード

    int[] array1 = { 1, 2, 3 }; 
    int[] array2 = { 3, 4, 5 }; 
    int x = 0; 
    int y = 0; 
    while (x < array1.Length) 
        { 
        y=0; 
        while (y < array2.Length) 
        { 
         while (array1[x] == array2[y]) 
         { 
          Console.WriteLine(String.Format("Matching number is {0}", array1[x])); 
          break; 
         } 
         y++; 
        } 
        x++; 
    } 
    

    はすべての一致を出力します。ここでは

    は、whileループで達成可能なコードです。最初の試合のみを取得するには、gotoを使用してこれらのループから抜け出すことができます。 最高のアドバイスは、あなたが何ができるか考えてみてください。あまりにも多くを知ることはできません。

    関連する問題