【问题标题】:A more elegant way to iterate over arrays [closed]一种更优雅的遍历数组的方法[关闭]
【发布时间】:2014-05-22 13:56:19
【问题描述】:

使用以下设置:

north = [comp1]
east = [comp2, comp3, comp4, comp5, comp6]
south = [comp7, comp8]
west = [comp9, comp10, comp11]
companies = [north, east, south, west]
recruiters = ["Bob", "Bill", "Jane", "Josh"]

我想遍历companies 的每个元素并将其中一个名称分配给每个元素。我想将招聘人员"Bob" 分配给north 的所有元素,将招聘人员"Bill" 分配给east,将招聘人员"Jane" 分配给south,将招聘人员"Josh" 分配给west

一种方法是这样做:

north.each do |c|
  company = Company.find_by(name: c)
  company.assigned_recruiter = recruiters[0]
end

并且该过程将对其余元素重复,但会更改招聘者数组的索引。

有没有更优雅的方法来做到这一点?

【问题讨论】:

  • 不清楚你在问什么。请提供您正在寻找的示例输出。最好在 MAYBE Code Review 上要求更优雅的代码。由于您的代码在技术上有效,因此除了重构之外没有任何问题需要解决。

标签: ruby arrays ruby-on-rails-3 loops


【解决方案1】:

你可以这样做:

companies.zip(recruiters).each do |companies, recruiter| 
  companies.each {|company, recruiter| assign_recruiter(company, recruiter) }
end

我还将companies 重命名为regions

【讨论】:

    【解决方案2】:

    您可以使用分配方法内联。

    north.each { |c| assign_recruiter(c, recruiters[0]) }
    east.each { |c| assign_recruiter(c, recruiters[1]) }
    south.each { |c| assign_recruiter(c, recruiters[2]) }
    west.each { |c| assign_recruiter(c, recruiters[3]) }
    

    这个地方可以访问

    def assign_recruiter(company, recruiter)
        c = Company.find_by(name: company)
        c.assigned_recruiter = recruiter
    end
    

    如果您不需要招聘人员数组,您可以将 recruiters[x] 替换为字符串文字。

    或者,您可以将数组放在散列中:

    companies = { 
        north: [comp1]
        east: [comp2, comp3, comp4, comp5, comp6]
        south: [comp7, comp8]
        west: [comp9, comp10, comp11]
    }
    recruiters = {
        north: "Bob",
        east: "Bill",
        south: "Jane",
        west: "Josh"
    }
    

    然后你可以遍历哈希...

    companies.each { |k, v| v.each { |c| assign_recruiter(c, recruiters[k]) } }
    

    【讨论】:

      猜你喜欢
      • 2020-01-09
      • 2014-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      • 1970-01-01
      • 2014-01-31
      • 1970-01-01
      相关资源
      最近更新 更多