2013-11-20 95 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表示道歉,這不是我的意圖 –