2013-11-20 61 views
1

我觉得这应该很简单,我只是碰壁而已。做到动作,直到条件得到满足

我需要遍历数组,直到满足条件。例如:

count = 0  
array = ["","","test","demo"] 

我想循环这个数组递增计数1直到找到第一个非空值。所以我想索引值为"test",但是当达到"test"时,我想停止循环。

此外,作为一个附注,我怎么才能找到数组中的第一个非空值的索引?我想知道这两种方法,因为它们都有潜在的应用。

回答

6

可以兼得:)

此找到你的第一个非空字符串的指数:

array = ["","","test","demo"] 
array.index {|str| !str.empty?} 
#=> 2 

您可以更新,如果你喜欢{|str| !str.empty?} - 块数,因为Array#index循环从开始到结束通过阵列。

FYI:该index方法是find_index

+0

哎哟!你更快:) –

+0

只有几秒;) – tessi

1

更好地利用别名:

first_non_empty_index = array.index{ |string| !string.empty? } 
0

做/而

begin 
    puts arr[count] 
    count+=1 
end while(arr[count].empty?) 

puts count #2 
puts arr[count] #test 
+4

eeeewwww。完全没有惯用的ruby –

+0

@mx Ruby支持很多样式:O(O)P,Functional等。这种自由来自于责任,所以如果你想评论一下,说一些有意义的东西(例如:速度慢,你不能使用X等)不是垃圾邮件,因为它不像X. –

+2

澄清:Ruby DOES允许这样的构造,但是如果你坚持这些,我认为你错过了语言的要点。 Ruby是关于表达的,所以编写惯用代码在这方面很重要。而且,你的代码风格在作用域(count)中引入了一个不必要的变量。 YMMV表示道歉,这不是我的意图 –