2010-06-30 73 views
1

我通過多條語句試圖環,但要通過每一個一次,例如:紅寶石環路下一個案例

while count < 5 do 
    count+= (not sure if this how ruby increments counts) 
    puts "In condition one" 
    next if count > 1 
    puts "In condition two" 
    next if count > 1 
    #.. 
end 

更新1:

感謝您的答覆,是什麼我試圖做的是循環通過一個數組,並將數組的每個元素應用於10個不同的條件。例如:array [有100個元素]元素1獲取條件1,元素2繼續條件2,依此類推。由於有10個條件,數組中的11要素將再次獲得條件1,依此類推(條件1個條件2條件3 ...)

更新2:

再次感謝您抽出有時間回覆。我很抱歉,我不是很清楚。該數組包含電子郵件。我有10個電子郵件服務器,並希望通過每個服務器發送我在陣列中的200封電子郵件(每個服務器只有1封電子郵件)。我希望這是有道理的

+1

對不起,我不明白你是什麼要求。爲什麼要循環? – 2010-06-30 17:20:21

+0

我有一個數組,我想通過循環,但數組中的每個元素需要每次都經歷不同的條件,然後在第一個條件重新啓動。 – rahrahruby 2010-06-30 17:28:21

+1

您應該編輯您的問題,以添加關於您實際嘗試執行的操作的更多詳細信息。這聽起來像你可能會錯誤的。 – mckeed 2010-06-30 17:32:27

回答

0

如果我正確地讀你,你想通過少量的服務器發送大量電子郵件的同時平衡負載。嘗試創建一個類來管理服務器(這裏的基本思想)

class ServerFarm 
    def initialize 
     @servers = [] 
    end 

    attr_accessor :servers 

    def add_server(server) 
     @servers << server 
    end 

    def remove_server(x) 
     if x.is_a?(Numeric) then 
      @servers.delete_at(x) 
     elsif x.is_a?(Server) 
      @servers.delete(x) 
     end 
    end 

    def server_available? 
     @servers.each {|s| return true if s.available? } 
     false 
    end 

    def dispatch_message(email) 
     @servers.each_with_index {|s, i| 
      next unless s.available? 
      s.dispatch(email) 
      return i 
     } 
     nil 
    end 
end 

現在,所有你需要做的就是爲電子郵件呼叫ServerFarm.dispatch_message,它會使用一個可用服務器發送。這個類假定你有一個名爲Server類,適用於您的單個服務器的信息,等等等等

+0

。 。等等,什麼? – 2010-06-30 18:15:07

+0

我的回答是迴應OP的更新,他將這些更新發布爲Adrian回答的評論,而不是更新問題。我會編輯問題並將其複製到那裏以防止混淆。 – bta 2010-06-30 20:10:20

+0

該解決方案如何平衡負載? – 2010-10-13 09:07:25

0

這是否有幫助?我不知道你在做什麼。

5.times do |count| 
    puts 'In condition ' + %w(one two three four five)[count] 
end 

5.times do |count|將excecute塊五次count從零開始並且每次遞增。 %w(one two three four five)["one", "two", "three", "four", "five"]相同。

如果你想連續做五件不同的事情,你不需要循環。只要把報表中的行:

# do thing 1 
# do thing 2 
# do thing 3 
# ... 

編輯

「我有一個數組,我想通過循環,但陣列中的每個元素需要通過每一次不同的條件然後在第一個條件下重新啓動。「

要遍歷數組不休,對測試條件的每個元素:

arr = ['sdfhaq', 'aieei', 'xzhzdwz'] 

loop do 
    arr.each do |x| 
    case x 
    when /..h/ 
     puts 'There was a \'h\' at the third character.' 
    when /.{6}/ 
     puts 'There were at least six characters.' 
    else 
     puts 'None of the above.' 
    end 
    end 
end 

編輯2

「感謝您的答覆,我想要做的是循環通過數組的每個元素應用於10個不同的條件,例如:array [有100個元素]元素1獲取條件1元素2繼續條件2等等,因爲有10個條件是數組中的第11個元素將再次得到條件1等等。條件1條件2條件「

您將需要在數字上使用%方法。

arr = Array.new(130) # an array of 130 nil elements. 
num_conditions = 10 

arr.each_with_index do |x, i| 
    condition = (i + 1) % num_conditions 
    puts "Condition number = #{condition}" 
end 

的更多信息:http://ruby-doc.org/core/classes/Fixnum.html#M001059

編輯3

def send_an_email(email, server) 
    puts "Sending an email with the text #{email.inspect} to #{server}." 
end 

email_servers = ['1.1.1.1', '2.2.2.2'] 
emails = ['How are you doing?', 'When are you coming over?', 'Check out this link!'] 

emails.each_with_index do |email, i| 
    send_an_email email, email_servers[i % email_servers.length] 
end 

您可以修改email_serversemails,並有它仍然可以工作,即使長改變。

+0

感謝您的回覆,我想要做的是循環通過一個數組,並將數組的每個元素應用於10個不同的條件,例如: 數組[有100個元素] 元素1獲取條件1元素2繼續條件2等,因爲有10個條件,數組中的第11個元素將再次獲得條件1,依此類推。 條件1 條件2 條件3 – rahrahruby 2010-06-30 17:36:01

+0

再次感謝您花時間回覆。我很抱歉,我不是很清楚。該陣列包含電子郵件,我有10個電子郵件服務器,並希望通過每臺服務器發送我在陣列中的200封電子郵件(每臺服務器只有1封電子郵件)。我希望這是有道理的。 – rahrahruby 2010-06-30 17:45:55

+0

如果最後一次編輯有幫助,您是否可以單擊我答案頂部附近的複選標記圖標?我仍然樂意提供幫助。謝謝。 :) – Adrian 2010-06-30 17:54:47

0
array = (1..100).to_a 
conditions = (1..10).to_a 

array.each_with_index do |elem, i| 
    puts "element %d, using condition %d" % [elem, conditions[i % conditions.length]] 
end 

產生

element 1, using condition 1 
element 2, using condition 2 
element 3, using condition 3 
element 4, using condition 4 
element 5, using condition 5 
element 6, using condition 6 
element 7, using condition 7 
element 8, using condition 8 
element 9, using condition 9 
element 10, using condition 10 
element 11, using condition 1 
element 12, using condition 2 

etc. 
+0

感謝您的回覆。這非常有幫助! – rahrahruby 2010-06-30 18:00:33

0
array.each_slice(10) do |emails| 
    servers.zip(emails) { |server,email| server<<email } 
end 

(紅寶石1.9.2)