繁体   English   中英

C#数组索引

[英]C# array indexing

如果这是一个明显的问题,请提前道歉。

我刚刚从java切换到C#,我正在C#中练习,以便熟悉它。 它只是一个二进制搜索程序。

  1. 此行key > array[mid]存在错误key > array[mid]无法将带有[]的索引应用于system.array类型的表达式。
  2. 我试图谷歌它,有人说它应该是key > array.GetValue(mid) ,但更改后错误变为“运算符<不能应用于int和object类型的操作数”。

我真的不知道该怎么做,我没有人讨论它,所以任何有关从Java切换到C#的帮助或任何建议都会很棒。 谢谢。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BinarySearch.BinarySearch
{
    class BinarySearch
    {
        public int BinarySearch(int key, Array array)
        {
            int lowerbound = 0, upperbound = array.Length, mid = 0, count = 0, midValue = 0;

            while (lowerbound <= upperbound)
            {
                mid = (lowerbound + upperbound)>>1;

                if (key < array[mid])
                {
                    upperbound = mid - 1;
                    count++;
                }
                else if (key > array[mid])
                {
                    lowerbound = mid + 1;
                    count++;
                }
                else
                {
                    count++;
                    return mid;
                }
            }

            return -1;   //the key does not exist in this array.
        }
    }
}

如果您确实希望在代码中使用类型Array ,则可以使用GetValue()方法,但需要将返回的object实例强制转换为int以进行比较。 例如:

if (key < (int)array.GetValue(mid))

但那可能不是你真正想要的。 您应该以与在Java中使用它相同的方式使用该数组。 例如:

public int BinarySearch(int key, int[] array)

那么你可以像在Java中一样编写表达式:

if (key < array[mid])

最后,还有其他一些事情:

  1. 你的代码返回一个没有任何意义的Array 我将上面示例中的返回类型更改为int
  2. .NET已经有了非常好的二进制搜索实现 人们希望这只是为了你自己的启发,而不是在某个地方的生产代码中使用的东西。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM