查找没有IF语句的匹配项?

时间:2016-04-14 01:53:17

标签: c# arrays if-statement

遇到这个问题/测验,可能会在面试中被问到。没看到怎么做......

你有两个充满随机数的数组,每个数组都有一个他们共享的数字。找到数字并输出数字。 (注意:不要使用IF语句)

4 个答案:

答案 0 :(得分:4)

使用Intersect。我想这是一个LINQ问题。

答案 1 :(得分: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);
}

答案 2 :(得分:1)

他们正在研究的是你进行函数式编程的能力(与程序性相反)。如几个答案所述,您可以使用LINQ交叉两个列表。

其他答案并不完整;你也被告知了

  • 只有一个共同的号码
  • 您应输出此号码

本着准函数式编程的精神,你应该在没有循环或显式条件的一个语句中这样做:

int[] a = { 1, 2, 3 };
int[] b = { 3, 4, 5 };

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

这可能更强大,例如

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

当交叉点中有零个或多个元素时,这不会barf 但严格来说,这些没有报告违反先决条件 - 应该只有一个匹配,其他任何东西都应该产生例外。

答案 3 :(得分:1)

我有类似的经历,但我不得不使用程序编程来了解我是否能想到解决这个难题的不止一种方法。

这是使用while循环可以实现的代码:

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++;
}

以上代码将打印所有匹配项。要获得第一个匹配项,您可以使用goto退出这些循环。 最好的建议,了解您是否有任何想法可以学习所有可能的做法。你永远不会知道太多。