在Ruby中,使用for循环是一种糟糕的风格.这通常被理解.推荐给我的风格指南:(https://github.com/bbatsov/ruby-style-guide#source-code-layout)说:
"永远不要使用,除非你确切知道为什么.大部分时间都应该使用迭代器.for是按每个方式实现的(所以你要添加一个间接级别),但有一个扭曲 - 因为没有介绍新的范围(与每个范围不同)和在其区块中定义的变量将在其外部可见."
给出的例子是:
arr = [1, 2, 3]
#bad
for elem in arr do
puts elem
end
# good
arr.each { |elem| puts elem }
Run Code Online (Sandbox Code Playgroud)
我已经研究过,我找不到关于如何模拟一个for循环的解释,该循环提供了一个迭代值,我可以传递给场所或执行算术运算.例如,我将替换什么:
for i in 0...size do
puts array1[i]
puts array2[size-1 - i]
puts i % 2
end
Run Code Online (Sandbox Code Playgroud)
如果它是一个阵列很容易,但我经常需要当前位置用于其他目的.有两种简单的解决方案,我很想念,或者情况的需要.此外,我听到人们谈论的,就好像从来没有需要它.那么他们的解决方案是什么呢?
可以改进吗?什么是解决方案,如果有的话?谢谢.
我正在帮助某人提出有关在C中输出的问题,而我无法回答这个看似简单的问题我想用答案(在我的回答中),即:
在C/C++中输出文件的最快方法是什么?
我使用C++和Java完成了素数生成和数学算法优化的大量工作,这对我来说有时是最大的劫持 - 我有时需要移动很多文件并且速度很快.
请原谅我,如果这已经得到回答,但我一直在寻找google和SO一段时间无济于事.
我不希望有人做基准测试的工作 - 但有几种方法可以存档,我怀疑我知道这一切.
总结一下,
有什么方法可以用C和C++输出到文件?
哪些是更快的?
显然从控制台重定向是非常糟糕的.任何简单的比较printf,cout,fputc,等会有所帮助.
编辑:
从评论中,
cout和printf有一个很好的基线测试: 混合cout和printf以获得更快的输出
这是一个很好的开始,但不是我要问的最佳答案.例如,它不处理评论中提到的std :: ostreambuf_iterator <>,如果这是可能的话.它也不处理fputc或提到控制台重定向(相比之下有多糟糕)(不是它需要)
编辑2:
此外,为了争论我的历史案例,你可以假设输出几乎无限量的数据(程序在较新的英特尔i7上运行数天,产生千兆字节的文本)
临时存储在这里只是非常有用 - 你不能轻易地缓冲千兆字节的数据.
在某些情况下,我发现自己需要在一些ruby脚本中编写一个相当冗长的if语句.
声明看起来像这样:
if long_var_name == 0 && very_different_name == 0 && other_third_var == 0 && additional_variable == 0 && name_five == 0 && longest_variable_name_six == 0
# (possibly even more conditions)
# do stuff here...
end
Run Code Online (Sandbox Code Playgroud)
似乎必须有一种更优雅的方式来做到这一点.
问题是,if并且and用谷歌作为基本的英语单词进行研究并不容易.所以我空手而归.
有没有人知道缩短这种情况的方法?当你有更多的东西时,它可能成为一个噩梦.
注意:我找到了一个针对OR类似情况的聪明解决方案: