我不知道有任何进行二进制搜索的内置集合。但是您可以使用该Array::sortOn
方法对数组进行排序并编写自己的二进制搜索代码。您可以从以下内容开始:
private static search(array:Array, prop:String, value:Object,
frm:Number, to:Number):Number
{
if(to - frm <= 1)
{
if(array[frm][prop] == value)
return frm;
if(array[to][prop] == value)
return to;
return -1;
}
var mid:int = (to + frm) / 2;
//use a compare function that returns -1, 0, +1 based on their relative values
if(array[mid][prop] == value)
return mid;
if(array[mid][prop] > value)
return search(array, prop, value, frm, mid - 1);
return search(array, prop, value, mid + 1, to);
}
array.sortOn("zip", Array.NUMERIC);
var index:Number = ClassName.search(array, "zip", "10015", 0, array.length - 1);
现在您可以从返回的索引值(如果它是!= -1)上下搜索并检索 zip 值 = 10015 的整个子集。
顺便说一句,如果数据太大而无法在客户端使用常规方法进行搜索,那么它是否也足以成为带宽瓶颈?