C# 数组索引
本文关键字:索引 数组 | 更新日期: 2023-09-27 18:33:57
如果这是一个明显的问题,请提前道歉。
我刚刚从java切换到C#,我正在用C#练习,以便熟悉它。这只是一个二进制搜索程序。
- 此行中存在错误
key > array[mid]
不能将带有 [] 的索引应用于 System.array 类型的表达式。 - 我试图谷歌它,有人说它应该是
key > array.GetValue(mid)
,但更改后错误变为"运算符<不能应用于 int=" 和对象类型的操作数="。</li">不能应用于>
我真的不知道该怎么做,也没有人可以讨论它,所以任何关于从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])
最后,其他几件事:
- 您的代码返回一个
Array
,这没有任何意义。我将上面示例中的返回类型更改为int
- .NET 已经有一个非常好的二叉搜索实现。人们希望这只是为了你自己的启发,而不是在某个地方的生产代码中使用的东西。:)