在二维数组中搜索比嵌套循环更有效的方法
More efficient way of searching through a two-dimensional array than nested for-loops?
所以我有一个函数,它接受一个二维数组和一个字符串。然后,它在表中进行搜索,并计算找到给定字符串的次数。
这是代码:
function getNumberShifts(table, name) {
var amount = 0;
for(i = 0; i < table.length; i++){
for(j = 0; j < table[i].length; j++){
var text = table[i][j].toString();
if(text.indexOf(name)>-1){
amount += 1;
}
}
}
return amount;
}
2D阵列没有那么大,大约是30 x 60。大多数单元格为空或包含1个元素(名称)。有时它可以包含两个。
有比O(n^2)更有效的方法吗?(这是谷歌表单脚本)
提前感谢!
编辑:示例表:
时间|周一|周二|周三|周四|周五|周六|周一|
12:00 |--name1|---name2|---name3|---name2*name4|---name1|name2|
。
。
.
(忽略破折号,它们只是为了格式化,所以你们可以"看到"表格)
基本上就是这样。只是一张有名字的表。最上面的一行和左边的列不是发送给函数的表的一部分。只是名字。有些单元格完全是空的(所以我和我的同事更容易阅读)
对于一个搜索,您无法更快地做到这一点。正如Safari所指出的,你必须在每个单元格中查找一次,有n^2个单元格,所以…
但是,如果您要搜索多次,将2D数组预处理为单个哈希数组可能是有意义的。因此,n^2的设置时间,但每次搜索只有一个log(n)查找时间。
var getNumberShiftsFinder = function(table) {
var found = {};
for(var i = 0; i < table.length; i++){
for(var j = 0; j < table[i].length; j++) {
var text = table[i][j].toString();
found[text] = 1 + ( found[text] || 0 );
}
}
return function(name) {
return found[name] || 0;
};
};
可能是将数组转换为字符串并使用字符串的indexOf,
在每次比赛后增加索引,将比不那么费力
在数组中迭代。
function getNumberShifts(table, name){
var i= 0, amount= 0, text= table.join(' ');
while((i= text.indexOf(name,i)+1)){
++amount;
}
return amount;
}
var A1= [
[0, "name2"], [1, ""], [2, "name2"], [3, ""],
[4, "name3"], [5, ""], [6, "name2"], [7, ""], [8, "name2"], [9, "name3"],
[10, "name2"], [11, ""], [12, "name2"], [13, ""], [14, "name3"], [15, ""],
[16, "name2"], [17, ""], [18, "name2"], [19, "name3"], [20, "name2"],
[21, ""], [22, "name2"], [23, ""], [24, "name3"], [25, ""],
[26, "name2"], [27, ""], [28, "name2"], [29, "name3"]
]
getNumberShifts(A1,'name3')
/*返回值:(Number)6.*/
相关文章:
- 在jQuery中创建向下滑动子菜单的最有效方法
- 使用Underscore.js修改json数组中所选元素的更有效方法
- 选择具有值数组的所有元素的最有效方法
- 将JSON存储和恢复到此Ionic应用程序的最有效方法
- 将javascript数组中的项移动到特定位置的有效方法
- 将JS对象数组转换为嵌套形式的最有效方法
- 隐藏具有特定类$.each、for等的元素的有效方法
- 什么's是调用具有可变参数的函数的有效方法
- 选择具有特定数据的所有 html 标记的最有效方法是什么 - [适当性],无论值如何
- 使用 jQuery 调用 PHP 端点的最有效方法
- 这是解析 Int 的有效方法吗?
- 在JavaScript中搜索数组映射的最有效方法
- 获取字符串中最后一个换行符的最有效方法是什么
- 什么's是在两个(或多个)阵列中找到匹配的细胞序列的最有效方法
- 什么's是在IE8+中添加元素的最有效方法
- 从任何jquery选择器字符串创建元素的最有效方法
- 在日期范围内查找丢失日期的最有效方法是什么
- 对区间[1,10^12]中的整数进行编码/解码的快速有效方法是什么
- 在条件(if)结构的条件语句中是否有定义变量的有效方法
- 在ASP.NET中使用JQuery UI自动完成的有效方法