C++:
for(i=0,j=0;i<0;i++,j++)
Run Code Online (Sandbox Code Playgroud)
红宝石中与此等价的是什么?
除了普通的for,while环在C++中看出.有人能说出ruby的其他特殊循环吗?如.times?.each?
提前致谢.
如果我理解你的问题(至少是它的第一部分),你想知道如何同时迭代两个单独的变量,例如i和j.
您可以使用for包含多个变量的循环在Ruby中执行此操作.举例来说,如果你想i从1数到10,并j从数10到20,你可以这样做:
for i, j in (1..10).zip(10..20)
puts "#{i}, #{j}"
end
Run Code Online (Sandbox Code Playgroud)
zip 将从两个数组生成一个数组,其中每个元素都是一个数组,第一个元素取自第一个数组中的相应位置,第二个元素取自第二个数组中的相应位置:
> [1, 2, 3].zip([4, 5, 6])
=> [[1, 4], [2, 5], [3, 6]]
Run Code Online (Sandbox Code Playgroud)
和使用i, j中的for循环将采取i从每个内阵列的第一个元素,并j从第二元件.
如果你想用each不是for,你可以只使用一个块有两个参数:
(1..10).zip(10..20).each { |i, j| puts "#{i}, #{j}" }
Run Code Online (Sandbox Code Playgroud)
至于你的问题的第二部分,Ruby并没有真正拥有固定数量的不同迭代器,因为大多数迭代是通过将块传递给方法来完成的,因此任何类都可以定义自己的方法,允许迭代自己的迭代内容.最常见的是each,任何定义each方法的Enumerable类都可以在类中混合,这为您提供了各种不同的方法来迭代元素,选择元素,过滤等等.还有times,upto和downto已定义的Integer类each_key,each_value,each_pair上Hash,each_byte,each_char,each_line上String, 等等.几乎任何定义某种集合或序列的类都有迭代所述集合或序列的方法.
Ruby与C++不同.在C++中,你使用for循环遍历任何东西,但是在Ruby中你会发现你通常会循环遍历一个可枚举的对象,所以更常见的做法是:
monkeys.each do |monkey|
monkey.say 'ow!'
end
Run Code Online (Sandbox Code Playgroud)
不要试图在两种语言之间寻找太多的等价物 - 它们是为不同的东西而构建的.显然有很多相同的东西,但你不能通过生成一个图表来学习Ruby,该图表一方面显示C++代码,另一方面显示Ruby等价物.尝试学习惯用的方法,你会发现它更容易.
如果您想要循环遍历可枚举对象,请查看以下所有方法Module: Enumerable:all? any? collect detect each_cons each_slice each_with_index entries enum_cons enum_slice enum_with_index find find_all grep include? inject inject map max member? min partition reject select sort sort_by to_a to_set zip.使用大多数这些方法,您可以使用for循环在C++中执行相同的操作.
| 归档时间: |
|
| 查看次数: |
2119 次 |
| 最近记录: |