2010-09-02 160 views
2

C++:红宝石环路问题

for(i=0,j=0;i<0;i++,j++) 

什么是等价按此在红宝石?

除了在C++中看到的正常for,while循环。有人可以从Ruby的其他特殊循环命名吗?如.times.each

在此先感谢。

+6

'i <0'?你确定? – Skilldrick 2010-09-02 21:10:51

+0

如果您在示例循环中提供了所有代码,您可能会得到更有帮助的答案。 – 2010-09-03 00:02:55

回答

5

红宝石是C++不同。在C++中,你通过什么用一个for循环回路,但在Ruby中,你会发现你通常是通过一个枚举对象循环,所以它是更常见的是做这样的事情:

monkeys.each do |monkey| 
    monkey.say 'ow!' 
end 

不要试图在两种语言之间寻找太多的等价性 - 它们是为不同的事物而建立的。显然有很多等价的东西,但是你不能通过生成一个显示C++代码的图表和另一个显示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++中的等效事情。

+0

如果你使用的是字符串,每种方法更多 - 'each_char'和'each_line'通常很方便。 – 2010-09-02 21:15:52

+0

'each_with_index'是另一个很棒的:) – Skilldrick 2010-09-02 21:18:35

3

你可以这样做:

(0..j).each do |i| 
    puts i 
end 
2

我不是非常熟悉C++,但AFAICS,相当于Ruby代码到您发布的循环很简单:

i, j = 0, 0 

这再次显示了表现力Ruby有。 任何人都可以弄清楚这是什么,即使他以前从未见过Ruby,而等价的C++需要相当长的一段时间才能发现。

+0

+1是一个smartass ;-) – sepp2k 2010-09-02 21:28:06

+0

有些人(不是我)可以看到它作为三元组,在中间有一个情感,所以我更喜欢括号内的版本[i ,j] = [0,0] – mb14 2010-09-10 14:25:31

+0

@ mb14:那将是'(i,j)= [0,0]',但是,这是一个很好的观点。 – 2010-09-10 17:35:48

9

如果我理解你的问题(至少是第一部分),你想知道如何在同一时间迭代两个单独的变量,如ij

您可以使用具有多个变量的for循环在Ruby中执行此操作。举例来说,如果你想i从1数到10,并j10数到20,你可以这样做:

for i, j in (1..10).zip(10..20) 
    puts "#{i}, #{j}" 
end 

zip会产生,来自两个阵列,单个阵列中的每个元素是一个数组,与来自相应位置的第一阵列中所采取的第一个元素,和从相应的位置上的第二阵列中所采取的第二要素:

> [1, 2, 3].zip([4, 5, 6]) 
=> [[1, 4], [2, 5], [3, 6]] 

而在你for循环使用i, j将采取来自每个内部阵列的第一个元素的,以及来自第二个元素的j

如果你想用each不是for,你可以只使用一个块有两个参数:

(1..10).zip(10..20).each { |i, j| puts "#{i}, #{j}" } 

关于你问题的第二部分,林心如并没有真正有一个固定数量不同的迭代器,因为大多数迭代是通过将一个块传递给一个方法来完成的,因此任何类都可以定义自己的方法来允许迭代自己的内容。最常见的是each,定义each方法的任何类都可以混合使用Enumerable类,该类提供了多种用于遍历元素,选择元素,过滤等的不同方法。也有timesuptodownto上定义的Integer类,each_keyeach_valueeach_pairHasheach_byteeach_chareach_lineString,等等。几乎任何定义某种集合或序列的类都有迭代所述集合或序列的方法。

+0

+1非常好,彻底:) – Skilldrick 2010-09-03 08:04:18