- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
假设我有这样的 map :
var map = {"a" : 100, "b" : 200, "c": 700};
map_array = [a, a, a, a, ... a, b, b, b, ... b, c, c, c, ... c]
var map_array = []
for(key in map)
{
for(var i=1; i <= map[key] ; i++)
{
map_array.push(key)
}
}
最佳答案
在我看来,这里真正的问题是构造重复 "a"
的子数组。的, "b"
的,和 "c"
的。一旦你有了它们,你就可以 concat
它们来制作你的最终阵列。
所以,我们真正想要的是一个函数 f(x, n)
它创建了一个填充了 n
的数组x
的。
因此,作为标准测试平台,我将定义一对 clock
职能。第一个测量一些数组填充函数创建 500000 个数组所需的时间,每个数组包含 2187 "a"
的。第二个测量一些数组填充函数创建 500 个数组所需的时间,每个数组包含 1594323 "a"
的。我选择 3 的幂是因为我的一些算法是基于二进制的,我想避免任何巧合。无论如何,所有算法都适用于任何 n
.
var clock1=function(f)
{
var m,t;
m=500000;
t=Date.now();
while(m--)
{
f("a", 2187);
}
t=Date.now()-t;
return t;
};
var clock2=function(f)
{
var m,t;
m=500;
t=Date.now();
while(m--)
{
f("a", 1594323);
}
t=Date.now()-t;
return t;
};
f
的一些候选人:
n
次,每次加一个
x
到我们的数组。
var f=function(x,n)
{
var y;
y=Array(n);
while(n--)
{
y[n]=x;
}
return y;
};
n
避免拨打
push
或
y.length
,以及将数组预初始化为所需的长度。 (均由亚历克斯建议。)我的倒退
while
循环只是一个旧习惯,可能
boost performance slightly .
clock1
和 90658 毫秒才能通过
clock2
.
concat
它与自身,有效地加倍。当它接近目标大小时,切换回一次添加一个元素,直到达到目标大小:
var f=function(x,n)
{
var y,m;
y=[x];
m=1;
while(m<n)
{
if(m*2<=n)
{
y=y.concat(y);
m*=2;
}
else
{
y[m]=x;
m++;
}
}
return y;
};
m
只是一个计数变量,用于跟踪 y 的大小。
clock1
和 42591 毫秒才能通过
clock2
,对于小数组,它比线性方法慢 65%,但对于大数组快 112%。
y
成为单元素数组
z
成为一个空数组。然后,循环(向后)遍历二进制数组,对于每个元素
concat
ing
y
与自己。在每次迭代中,如果各自的二进制位为1,则保存
y
进入
z
.最后,
concat
z
的所有元素一起。结果是您的完整数组。
[1,0,1,0,1,1,1,1,0,0]
concat
和 6 个元素相加,生成
z
看起来像这样:
[0,0,4,8,16,32,128,512]
// I've written the lengths of the sub-arrays rather than the arrays themselves.
concat
一切尽在
z
一起,它得到一个长度为 700 的数组,即我们的结果。
var f=function(x,n)
{
var y,z,c;
c=0;
y=[x];
z=[];
while(n>0)
{
if(n%2)
{
z[c++]=y;
n--;
}
if(n===0)
{
break;
}
n/=2;
y=y.concat(y);
}
return z.concat.apply([],z);
};
z.concat.apply([],z)
使用了一点
apply
变平的魔法
z
, 一个数组数组,变成一个数组。出于某种原因,这比连接到
z
更快在飞行中。第二个
if
语句防止它加倍
y
计算完成后的最后一次。
clock1
和 26809 毫秒通过
clock2
,对于小数组来说比部分二进制方法快 15%,对于大数组快 59%。对于小数组,它仍然比线性方法慢 44%。
concat
功能很奇怪。相对而言,要连接的数组越大,效率就越高。换句话说,组合两个长度为 100 的数组比使用
concat
组合四个长度为 50 的数组要快得多。 .结果,随着涉及的数组变大,
concat
变得比
push
更有效率,或直接赋值。这是二进制方法比大型数组的线性方法更快的主要原因之一。不幸的是,
concat
也受到影响,因为它每次都复制涉及的数组。因为数组是对象,所以这会变得非常昂贵。字符串没有数组那么复杂,所以也许使用它们可以避免这种消耗?我们可以简单地使用字符串加法(类似于串联)来构造我们的数组,而
split
结果字符串。
var f=function(x,n)
{
var y,z;
y=""+x;
z="";
while(n>0)
{
if(n%2)
{
z+=y;
n--;
}
if(n===0)
{
break;
}
y+=y;
n/=2;
}
return z.split("");
};
clock1
和 14534 毫秒通过
clock2
,使其在计算小数组时比基于数组的全二进制方法慢 10%,但对大数组快 85%。
关于Javascript在数组中添加相同的元素N次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23237610/
是 if(a == 0 && b == 0 && c == 0) { return; } 一样 if(a == 0) { return; } if(b == 0) { return; } if(c =
我想做这样的事情: Class A Class B extends A Class C extends A B b = new B(); C c = new C(); b->setField("foo
我对 Mysql 世界很天真......:)我试图使用连接从表中查询, 我遇到结果集问题...表结构如下 下面... VIDEO_XXXXX | Field | Type
我最近问过关于从另一个类获取类的唯一实例的问题。 ( How to get specific instance of class from another class in Java? ) 所以,我正
假设我们有两种类型 using t1 = int*; using t2 = int*; 我知道 std::is_same::value会给我们true .什么是,或者是否有模板工具可以实现以下目标?
对于我的一个应用程序,我假设比较 2 个字符串的第一个字符比比较整个字符串是否相等要快。例如,如果我知道只有 2 个可能的字符串(在一组 n 字符串中)可以以相同的字母开头(比如说 'q'),如果是这
我想在我的NXP LPC11U37H主板(ARM Cortex-M0)上分析一些算法,因为我想知道执行特定算法需要多少个时钟周期。 我编写了这些简单的宏来进行一些分析: #define START_C
我在 Excel 中创建了一个宏,它将在 Excel 中复制一个表格,并将行除以我确定的特定数字(默认 = 500 行),并为宏创建的每个部门打开不同的工作表。 使用的代码是这样的: Sub Copy
我想根据第一个字典对第二个字典的值求和。如果我有字典 A 和 B。 A = {"Mark": ["a", "b", "c", "d"], "June": ["e", "a"], "John": ["a
当我这样做时 system()在 Perl 中调用,我通常根据 perldocs 检查返回码.嗯,我是这么想的。大部分时间 $rc!=0对我来说已经足够了。最近我在这里帮助了两个遇到问题的人syste
在我的进度条上,我试图让它检测 div 加载速度。 如果 div 加载速度很快,我想要实现的目标将很快达到 100%。但进度条的加载速度应该与 div 的加载速度一样快。 问题:如何让我的进度条加载
当我获得与本地时间相同的时间戳时,firebase 生成的服务器时间戳是否会自动转换为本地时间,或者我错过了什么? _firestore.collection("9213903123").docume
根据the original OWL definition of OWL DL ,我们不能为类和个体赋予相同的名称(这是 OWL DL 和 OWL Full 之间的明显区别)。 "Punning" i
我有两个输入复选框: 尝试使用 jQuery 来允许两个输入的行为相同。如果选中第一个复选框,则选中第二个复选框。如果未检查第 1 个,则不会检查第 2 个。反之亦然。 我有代码: $('inpu
可以从不同系统编译两个相同的java文件,但它们都有相同的内容操作系统(Windows 7),会生成不同的.class文件(大小)? 最佳答案 是的,您可以检查是否有不同版本的JDK(Java Dev
我正在清理另一个人的正则表达式,他们目前所有的都以结尾 .*$ 那么下面的不是完全一样吗? .* 最佳答案 .*将尽可能匹配,但默认情况下为 .不匹配换行符。如果您要匹配的文本有换行符并且您处于 MU
我使用 Pick ,但是如何编写可以选择多个字段的通用PickMulti呢? interface MyInterface { a: number, b: number, c: number
我有一个 SQL 数据库服务器和 2 个具有相同结构和数据的数据库。我在 2 个数据库中运行相同的 sql 查询,其中一个需要更长的时间,而另一个在不到 50% 的时间内完成。他们都有不同的执行计划。
我需要你的帮助,我有一个包含两列的表,一个 id 和 numpos,我希望 id 和 numops 具有相同的结果。 例子: $cnx = mysql_connect( "localhost", "r
如何将相同的列(在本例中按“级别”排序)放在一起?我正在做一个高分,我从我的数据库中按级别列出它们。如果他们处于同一级别,我希望他们具有相同的 ID。 但是我不想在别人身上显示ID。只有第一个。这是一
我是一名优秀的程序员,十分优秀!