人们经常使用
for i in [0 .. 10] do something
但是 afaik 创建了一个列表,然后对其进行迭代,在我看来使用它会更有意义
for i = 0 to 10 do something
没有创建不必要的列表但具有相同的行为。
我错过了什么吗? (我想是这样的)
最佳答案
你是对的,写作 for i in [0 .. 10] do something
生成一个列表,它确实有很大的开销。虽然你也可以省略方括号,在这种情况下它只会构建一个惰性序列(而且,事实证明编译器甚至优化了这种情况)。我一般更喜欢写作 in 0 .. 100 do
因为它看起来与迭代序列的代码相同。
使用 #time
F#交互的特性做一个简单的分析:
for i in [ 0 .. 10000000 ] do // 3194ms (yikes!)
last <- i
for i in 0 .. 10000000 do // 3ms
last <- i
for i = 0 to 10000000 do // 3ms
last <- i
for i in seq { 0 .. 10000000 } do // 709ms (smaller yikes!)
last <- i
所以,事实证明编译器实际上优化了
in 0 .. 10000000 do
与 0 to 10000000 do
相同环形。您可以强制它显式创建惰性序列(最后一种情况),这比列表快,但仍然很慢。
关于f# - 列表中的for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29747854/