所以Scala应该和Java一样快.我正在重新审视我最初用Java解决的Scala中的一些Project Euler问题.具体问题5:"从1到20的所有数字均可被整除的最小正数是多少?"
这是我的Java解决方案,在我的机器上完成需要0.7秒:
public class P005_evenly_divisible implements Runnable{
final int t = 20;
public void run() {
int i = 10;
while(!isEvenlyDivisible(i, t)){
i += 2;
}
System.out.println(i);
}
boolean isEvenlyDivisible(int a, int b){
for (int i = 2; i <= b; i++) {
if (a % i != 0)
return false;
}
return true;
}
public static void main(String[] args) {
new P005_evenly_divisible().run();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我对Scala的"直接翻译",需要103秒(147倍!)
object P005_JavaStyle {
val t:Int = 20;
def run {
var …Run Code Online (Sandbox Code Playgroud) 在Python的性能方面,是一个列表理解,还是比for循环更快的map(),filter()和reduce()等函数?从技术上讲,为什么它们"以C速度运行",而"for循环以python虚拟机速度运行"?
假设在我正在开发的游戏中,我需要使用for循环绘制复杂且巨大的地图.这个问题肯定是相关的,因为如果列表理解确实更快,那么为了避免滞后(尽管代码的视觉复杂性),这将是一个更好的选择.
有没有办法forEach在Java 8中构建一个使用索引进行迭代的方法?理想情况下,我喜欢这样的事情:
params.forEach((idx, e) -> query.bind(idx, e));
Run Code Online (Sandbox Code Playgroud)
我现在能做的最好的事情是:
int idx = 0;
params.forEach(e -> {
query.bind(idx, e);
idx++;
});
Run Code Online (Sandbox Code Playgroud) var user = {};
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个setUsers()接受键/值对对象并初始化user变量的方法.
setUsers = function(data) {
// loop and init user
}
Run Code Online (Sandbox Code Playgroud)
数据如下:
234: "john", 23421: "smith", ....
Run Code Online (Sandbox Code Playgroud) 首先,我理解90%的应用程序中性能差异完全不相关,但我只需要知道哪个是更快的构造.那......
目前在网上提供的信息令人困惑.很多人说foreach很糟糕,但从技术上来说它应该更快,因为它假设使用迭代器简化了数组遍历的编写.迭代器,再次假设更快,但在PHP中也显然死得很慢(或者这不是PHP的东西?).我在谈论数组函数:next()prev()reset()等等,如果它们是偶数函数而不是那些看起来像函数的PHP语言特性之一.
为了缩小这个范围:我在以超过1的步长遍历数组时没有兴趣(也没有负步骤,即反向迭代).我也对从任意点到任意点的遍历不感兴趣,只有0到长度.我也没有看到定期操作超过1000个键的数组,但我确实看到一个数组在应用程序的逻辑中被遍历了多次!另外,对于操作,主要是字符串操作和回声.
以下是一些参考站点:
http://www.phpbench.com/
http://www.php.lt/benchmark/phpbench.php
我到处听到的内容:
foreach很慢,因此for/ while更快foreach复制它迭代的数组; 为了使它更快你需要使用引用$key = array_keys($aHash); $size = sizeOf($key);
for ($i=0; $i < $size; $i++)foreach这是我的问题.我写了这个测试脚本:http://pastebin.com/1ZgK07US,无论我运行脚本多少次,我得到这样的东西:
foreach 1.1438131332397
foreach (using reference) 1.2919359207153
for 1.4262869358063
foreach (hash table) 1.5696921348572
for (hash table) 2.4778981208801
Run Code Online (Sandbox Code Playgroud)
简而言之:
foreach比foreach参考更快foreach 比...更快 forforeachfor比哈希表更快谁能解释一下?
PHP版本5.3.0
我有一个循环的基本数字,它在每次迭代时将变量num递增1 ...
for (( num=1; num<=5; num++ ))
do
echo $num
done
Run Code Online (Sandbox Code Playgroud)
哪个输出:
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
我正在尝试让它产生输出(在$ num之前加上前导零):
01
02
03
04
05
Run Code Online (Sandbox Code Playgroud)
没有做:
echo 0$num
Run Code Online (Sandbox Code Playgroud) 我希望在PHP中打破外部for/foreach循环.
这可以在ActionScript中完成,如下所示:
top : for each(var i:MovieClip in movieClipArray)
{
for each(var j:String in nameArray)
{
if(i.name == j) break top;
}
}
Run Code Online (Sandbox Code Playgroud)
什么是PHP等价物?
我是C++语言的新手.我已经开始使用向量,并且已经注意到在我看到的所有代码中通过索引迭代通过向量,for循环的第一个参数总是基于向量.在Java中,我可以使用ArrayList执行类似的操作:
for(int i=0; i < vector.size(); i++){
vector[i].doSomething();
}
Run Code Online (Sandbox Code Playgroud)
有没有理由我在C++中没有看到这个?这是不好的做法吗?
如何退出vb.net中的嵌套for或循环?
我尝试使用exit,但它只跳转或断开一个for循环.
我怎样才能做到以下几点:
for each item in itemList
for each item1 in itemList1
if item1.text = "bla bla bla" then
exit for
end if
end for
end for
Run Code Online (Sandbox Code Playgroud) 如此处所述, TypeScript引入了一个foreach循环:
var someArray = [9, 2, 5];
for (var item of someArray) {
console.log(item); // 9,2,5
}
Run Code Online (Sandbox Code Playgroud)
但是没有任何索引/密钥吗?我希望有类似的东西:
for (var item, key of someArray) { ... }
Run Code Online (Sandbox Code Playgroud) for-loop ×10
foreach ×3
performance ×3
java ×2
php ×2
arrays ×1
bash ×1
break ×1
c++ ×1
coding-style ×1
iteration ×1
iterator ×1
java-8 ×1
javascript ×1
key-value ×1
loops ×1
map-function ×1
nested-loops ×1
python ×1
scala ×1
typescript ×1
vb.net ×1
while-loop ×1