следующий пример - PullRequest
       1

следующий пример

1 голос
/ 30 июня 2010

Я пытаюсь пройтись по нескольким операторам, но хочу просмотреть каждый из них, например:

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 различным условиям.Например: массив [имеет 100 элементов], элемент 1 получает условие 1, элемент 2 переходит в условие 2 и так далее.Поскольку существует 10 условий, 11-й элемент в массиве снова получит условие 1 и т. Д. (Условие 1, условие 2, условие 3 ...)

Обновление 2:

Еще раз спасибо, что нашли время ответить.Я прошу прощения, что я не очень ясно.Массив содержит электронные письма.У меня есть 10 почтовых серверов, и я хочу отправить 200 электронных писем в моем массиве через каждый сервер (только 1 электронное письмо на сервер).Я надеюсь, что это имеет смысл

Ответы [ 4 ]

0 голосов
/ 13 октября 2010
array.each_slice(10) do |emails|
    servers.zip(emails) { |server,email| server<<email }
end

(Ruby 1.9.2)

0 голосов
/ 30 июня 2010
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 голосов
/ 30 июня 2010

Если я правильно читаю вас, вы хотите отправить большое количество электронных писем через небольшое количество серверов при балансировке нагрузки.Попробуйте создать класс для управления серверами (вот основная идея)

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 голосов
/ 30 июня 2010

Это помогает? Я не могу сказать, что вы пытаетесь сделать.

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

5.times do |count| будет выполнять блок пять раз с 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 [has 100 elements] element 1 получает условие 1 element 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

Редактировать три :

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_servers и emails и заставить его работать, даже если длины изменены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...