
恳切求助,关于vb.net里的Array.BinarySearch()方法问题?
Array.BinarySearch()和ICamparable接口有什么关系呢?他们互相作用机制和过程是怎样的呢?按理来说查询一个一维数组元素,不是只要比较值是否相等不...
Array.BinarySearch()和ICamparable接口有什么关系呢?他们互相作用机制和过程是怎样的呢?按理来说查询一个一维数组元素,不是只要比较值是否相等不就可以了吗,怎么还有什么-1、0、1之类的返回值呢,而这些值又是ICamparable接口的CompareTo函数产生的,ICamparable和CompareTo又有什么关系呢?请详细解答 谢谢!
算了 问题简化一下 我就是想问问Array.BinarySearch()是怎么进行查询的,应该和ICamparable接口有关,那他们之间的关系有是怎么样子的呢 请详细点 谢过 展开
算了 问题简化一下 我就是想问问Array.BinarySearch()是怎么进行查询的,应该和ICamparable接口有关,那他们之间的关系有是怎么样子的呢 请详细点 谢过 展开
2个回答
展开全部
Array.BinarySearch()是2分查找。Comparable是一个比较的接口,这个类的意思是做一个排序。调用这个BinarySearch查找函数要在排序后进行才行,不然不能保证结果正确。
这些函数具体的详细返回值作用可以去微软的msdn上去找有详细的解释的。
Camparable和CompareTo的关系比较抽象不大容易形容。网上找了段形容感觉还是比较接近那个意思的。
一个类继承了comparable 或是comparator接口后,重定义了compareTo()或是compare()方法,虽然是重定义当然是看你自己如何比较的啊.一个人的对象,有身高,和体重,有形状,如果你愿意.你可以只比较身高相同就认为了同一个人,但你也可以比较他所有的属性相同就认为了同一个人:
class 人
{
int 身高;
int 体重;
public int compareTo(另一个人的对象)
{
if(this.身高==另一个人的对象.身高)
return 0;
}
如果你想光身高相同还不行,那就把所有属性都相同才返回0
}
就是让你自己按你想象的条件来认定对象想同的
接口中compareTo是抽象的,没有实现,继承了后这个方法也隐含在子类中,
要实现它,不然这个类就是抽象类了.如果不想用也要定义一个空实现:
public int compaereTo(Object o)
======================分割线=========================
Icomparer接口有两种模式: Compare / CompareOrdinal
Compare:比较两个字符串的值。返回整数值。
CompareOrdinal:比较两个字符串而不考虑本地区域性。返回整数值。
默认情况下采用Compare进行查询。
我解释的不是很清楚,你可以看看方法的官方说明。就明白啦。
这些函数具体的详细返回值作用可以去微软的msdn上去找有详细的解释的。
Camparable和CompareTo的关系比较抽象不大容易形容。网上找了段形容感觉还是比较接近那个意思的。
一个类继承了comparable 或是comparator接口后,重定义了compareTo()或是compare()方法,虽然是重定义当然是看你自己如何比较的啊.一个人的对象,有身高,和体重,有形状,如果你愿意.你可以只比较身高相同就认为了同一个人,但你也可以比较他所有的属性相同就认为了同一个人:
class 人
{
int 身高;
int 体重;
public int compareTo(另一个人的对象)
{
if(this.身高==另一个人的对象.身高)
return 0;
}
如果你想光身高相同还不行,那就把所有属性都相同才返回0
}
就是让你自己按你想象的条件来认定对象想同的
接口中compareTo是抽象的,没有实现,继承了后这个方法也隐含在子类中,
要实现它,不然这个类就是抽象类了.如果不想用也要定义一个空实现:
public int compaereTo(Object o)
======================分割线=========================
Icomparer接口有两种模式: Compare / CompareOrdinal
Compare:比较两个字符串的值。返回整数值。
CompareOrdinal:比较两个字符串而不考虑本地区域性。返回整数值。
默认情况下采用Compare进行查询。
我解释的不是很清楚,你可以看看方法的官方说明。就明白啦。
参考资料: http://msdn.microsoft.com/zh-cn/library/523d096t(VS.95).aspx
展开全部
返回值为-1 说明当前量小于被比量
为1则说明当前量大于被比量
o则是二者相等的意思
所以根据不同的返回值就可以判定大小(大于小于还是等于)了
而Array.BinarySearch()本身返回的是找到的元素的索引值,也就是相等数组元素的索引值,当然没找到返回-1,因为-1不代表任何元素,这个里面的原因知道吧 我就不废话了 所以在查询时只要让Index=Array.BinarySearch(数组名,...)>=0 就找出了你要的那些元素,要显示列出那个元素来的话,可以用个if。。else做下判断。。。。恩,具体还得多练练
为1则说明当前量大于被比量
o则是二者相等的意思
所以根据不同的返回值就可以判定大小(大于小于还是等于)了
而Array.BinarySearch()本身返回的是找到的元素的索引值,也就是相等数组元素的索引值,当然没找到返回-1,因为-1不代表任何元素,这个里面的原因知道吧 我就不废话了 所以在查询时只要让Index=Array.BinarySearch(数组名,...)>=0 就找出了你要的那些元素,要显示列出那个元素来的话,可以用个if。。else做下判断。。。。恩,具体还得多练练
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询