【发布时间】:2014-05-30 16:13:47
【问题描述】:
.NET 4.5.1
我有一组 Int16 值,它们的范围从 -4 到 32760。范围内的数字不是连续的,但它们的顺序是从 -4 到 32760。换句话说,从 16 开始的数字-302 不在“一堆”中,但数字 303-400 在那里,数字 2102 不在,等等。
确定某个特定值(例如 18400)是否在“组”中的最快方法是什么?现在它在一个 Int16[] 中,并且 Linq Contains 方法用于确定一个值是否在数组中,但是如果有人能说出为什么/如何不同的结构可以更快地提供单个值,我将不胜感激。速度是这种查找的关键(“bunch”是静态类的静态属性)。
有效的示例代码
Int16[] someShorts = new[] { (short)4 ,(short) 5 , (short)6};
var isInIt = someShorts.Contains( (short)4 );
我不确定这是否是可以做到的最高效的事情。
谢谢。
【问题讨论】:
-
数组排序了吗?这些数字是唯一的吗,或者例如你会有两次 18400 吗?
-
什么@lc。问;您似乎暗示它们是有序且独特的,但我也不是 100% 的。
-
@lc 没有重复的数字,每个数字都出现在“一堆”中一次。这些数字按从最小 (-4) 到最大 (32760) 的数字顺序排列。
标签: c# arrays performance linq