我想编写一个紧凑版本,检查一个元素是否包含在数组中
我有这些数据。 " 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"
}
答案 0 :(得分:4)
如果out_cmd
和list
是数组,那么您可以执行以下操作:
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"]