【问题标题】:How to looping through multiple arrays in Ruby?如何在 Ruby 中循环遍历多个数组?
【发布时间】:2014-11-04 13:33:19
【问题描述】:

我是 Ruby 的新手。我正在创建一个遇到以下问题的 rails 平台: 我有我的第一个数组,为了简单起见,我将其称为“资本”: capital = [A,B,C,D]。我有第二个数组small = [a,b,c,d]small 的元素与capital 的元素具有多对一的关系,如:

capital 
has_many:small

这两个是通过我数据库中的两个表链接的,所以可以打印出这些数组的有效组合

capital.each do |x|
     small.each do |y|
        puts x,y
     end
end

打印出数据库中定义的 x,y 的有效组合。这工作得很好。

现在,问题来了:我有第三个数组array_3,其中包含capitalsmall 元素的一些组合,如:

array_3 = [(A,c), (C,d), (D,b)]

我想打印数据库中定义的capitalsmall 元素的所有有效组合,以便array_3 中不存在该组合。我该怎么办?

【问题讨论】:

  • 你能正确地格式化问题吗? :-)

标签: ruby-on-rails ruby


【解决方案1】:
capital = %w(A B C D)
small = %w(a b c d)
array_3 = [%w(A c), %w(C d), %w(D b)]

capital.product(small) - array_3
#=> [["A", "a"], ["A", "b"], ["A", "d"], ["B", "a"], ["B", "b"], ["B", "c"], ["B", "d"], ["C", "a"], ["C", "b"], ["C", "c"], ["D", "a"], ["D", "c"], ["D", "d"]]

【讨论】:

    【解决方案2】:

    你可以这样做

    capital.each do |x|
      small.each do |y|
        puts x,y unless array_3.include?([x,y])
      end
    end
    

    【讨论】:

    • 我已经通过修改所有组合的解决方案来发布 d 答案..bdw 1+ 为此;)
    【解决方案3】:

    这是capitalsmall 的所有组合,它们存在于array_3

    capital.each do |x|
      small.each do |y|
        puts "[#{x}, #{y}]" unless array_3.exclude?([x,y])
        puts "[#{y}, #{x}]" unless array_3.exclude?([y,x])
      end
    end
    

    在控制台检查代码:

    > small
     => ["a", "b", "c", "d"] 
    > capital
     => ["A", "B", "C", "D"] 
    > array_3
     => [["A", "c"], ["C", "d"], ["D", "b"], ["A", "A"], ["C", "C"], ["a", "C"], ["b", "A"]]
    
    > capital.each do |x|
    >   small.each do |y|
    >      puts "[#{x}, #{y}]" unless array_3.exclude?([x,y])
    >      puts "[#{y}, #{x}]" unless array_3.exclude?([y,x])
    >   end
    > end
    

    输出:

    =>[b, A]      # [small, capital]
    [A, c]        # [capital, small]
    [a, C]        # [small, capital]
    [C, d]        # [capital, small]
    [D, b]        # [capital, small]
    

    注意:您可以使用if array_3.include? 代替unless array_3.exclude?,这将返回相同的结果。

    关于exclude?include? 的更多信息,因为您是Ruby 新手。 ;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 2011-08-28
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多