搜索算法C#

时间:2015-03-03 03:37:14

标签: c# algorithm

我有问题我想使用bool函数来创建搜索算法 这是我的代码

private bool IsEqual(int data1, int[] arr2){
     bool find=false;

        foreach(int data2 in arr2){
           if(data1==data2){
              find=true;
              break;
              }
     }

     return find;
}

这就是我调用函数

int data1=2;
int[] arr={1,2,3,4,5};
if(IsEqual(data1, arr)){
    console.writeline("Find in index");
 }

如果找到数字,我如何得到数组的索引?

注意:

  • 我必须使用bool功能

  • 我无法在bool函数中添加参数

  • 我无法在参数中添加关键字,例如ref int data1

  • 仅更改bool功能

  • 我无法添加其他功能

5 个答案:

答案 0 :(得分:1)

您可以返回index。如果未找到则返回-1(而不是false)

答案 1 :(得分:1)

您必须自己维护计数,或切换为使用for(int i=...循环:

int i = 0;
foreach(int data2 in arr2) {
    if( data2 == data1 ) return i;
    i++;
}
return -1;

答案 2 :(得分:1)

C#有一个ref参数的概念:https://msdn.microsoft.com/en-us/library/14akc2c7.aspx

private bool IsEqual(ref int data1, int[] arr2) {
    bool find=false;
    for(int i = 0; i < arr2.Length; i++) {
        if(data1==arr2[i]) {
            find=true;
            data1 = i;
            break;
        }
    }
    if(!find) {
        data1 = -1;
    }
    return find;
}

这可以像这样调用

int data1=2;
int[] arr={5,4,3,2,1};
if(IsEqual(ref data1, arr)){
    console.writeline("Find in index");
}
int index = data1;

答案 3 :(得分:0)

an out parameterfor循环结合使用。与它一起玩hereout参数可让您保持返回bool,并构建for循环以跟踪数组索引。

using System;
public class Program
{
    // this is your method
    // using an out parameter and a for loop
    // ignore the static keyword - it isn't important for the example
    private static bool IsEqual(int data1, int[] arr2, out int index)
    {
        index = -1;
        bool find = false;
        for(int i = 0; i < arr2.Length; i++)
        {
            if (data1 == arr2[i])
            {
                find = true;
                index = i;
                break;
            }
        }
        // you don't need to return the index
        // the out parameter covers that for you
        return find;
    }

    public static void Main()
    {
        // and this is i call the function 
        int data1 = 2;
        int[] arr = { 1, 2, 3, 4, 5 };

        int index;
        if (IsEqual(data1, arr, out index))
        {
            Console.WriteLine("Find in index {0}", index);
        }
    }
}

答案 4 :(得分:0)

好的,鉴于您的奇怪约束,这里有一些代码可以找到您的int的索引,&#34;使用&#34;你的IsEqual功能:

int data1=2;
int[] arr={1,2,3,4,5};
for (int ix = 0; ix < arr.Length; ix++) {
    if(IsEqual(data1, new int[] { arr[ix] })) {
        Console.WriteLine("Find in index {0}", ix);
        break;
    }
}

这是非常可怕的代码,但它可以做你想要的......