检查元素是否包含在RUBY中的数组中

时间:2014-11-20 15:53:15

标签: ruby arrays compare iteration

我想编写一个紧凑版本,检查一个元素是否包含在数组中

我有这些数据。 " 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"
}

3 个答案:

答案 0 :(得分:4)

如果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)

答案 1 :(得分: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

答案 2 :(得分:0)

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

如果你有:

out_cmd = %w[
  aaaaaa
  bbbbbb
  cccccc
  dddddd
]

list = %w[
  cccccc
  aaaaaa
]

您可以轻松查看它们的共同点:

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

或者有什么不同之处:

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