【问题标题】:Check if an element is included in an array in RUBY检查一个元素是否包含在 RUBY 的数组中
【发布时间】:2015-01-18 13:35:14
【问题描述】:

我想写一个简洁的版本来检查一个元素是否包含在数组中

我有这些数据。 "out_cmd" 是这样的数组:

aaaaaa
bbbbbb
cccccc
dddddd

而“list”是另一个数组,如:

cccccc
aaaaaa

对于“out_cmd”的每一行,我想知道它是否包含在“list”中。如果是这种情况,请跳过该行。这是我的(不工作)代码:

outputs=Array.new
out_cmd.each_line { |line|
    next if line.include?"*"
    next if list.include?(line)
    "DO SOMETHING"
}

【问题讨论】:

    标签: ruby arrays compare iteration


    【解决方案1】:
    list = File.readlines('list.txt').map(&:chomp) #=> ["aaaaaa", "bbbbbb", "cccccc", "dddddd"]
    
    File.readlines('out_cmd.txt').map(&:chomp).each do |line|
      next if list.include?(line)
    end
    

    【讨论】:

    • 使用foreach,你就不需要使用map(&:chomp)
    【解决方案2】:

    如果out_cmdlist 是数组,那么你可以这样做:

    out_cmd - list
    

    out_cmd 中查找list 中不存在的行。

    因此,可以编写如下代码:

    (out_cmd - list).each { |line|
      # this iterates every line in out_cmd which is not in list
      p line
    }
    

    注意:根据您对out_cmd 的使用,它不是您声称的数组,而是可能包含更多行的字符串。如果是这种情况,请先将其转换为这样的数组:out_cmd.lines.map(&:chomp)

    【讨论】:

      【解决方案3】:

      @wolf 提到了这一点,但没有以显示正在发生的事情的方式解释它。

      如果你有:

      out_cmd = %w[
        aaaaaa
        bbbbbb
        cccccc
        dddddd
      ]
      
      list = %w[
        cccccc
        aaaaaa
      ]
      

      你可以很容易地看到它们的共同点:

      out_cmd & list # => ["aaaaaa", "cccccc"]
      

      或者有什么区别:

      out_cmd - list # => ["bbbbbb", "dddddd"]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-30
        • 2017-03-03
        • 2016-10-13
        • 1970-01-01
        • 2022-01-02
        • 2020-11-21
        • 1970-01-01
        相关资源
        最近更新 更多