var_arry
包含该类的所有实例变量。但我希望数组没有重复。我怎么能请帮助我。
file = open("sample.txt")
var_arr = []
file.each do |line|
var = line.match /@(\w+_\w+|\w+)/
if var != nil
var_arr << var
end
end
puts var_arr.uniq!
我得到以下输出。但是我希望消除这个重复的值我使用.uniq!
方法,但它无法工作
@event
@event
@event
@event
@event_participants
@event_participants
@event_participants
@event_participants
@event_participants
@event_participants
@event_participants
@event_participants
@project
@event
@project
@events
@projects
@events
@subscription
@admin
@subscription
@owners
@projects
@projects
@projects
@project_files
@project_file
@project_file
@project_file
@project_file
@sort_option
@sort_direction
@sort_filter
@sort_filter
@sort_filter
@sort_filter
@sort_filter
@sort_filter
@sort_filter
@sort_option
@sort_option
@sort_option
@sort_option
@sort_option
@sort_direction
@sort_direction
@sort_direction
@sort_direction
@sort_direction
@sort_filter
@projects
@projects
@sort_direction
@projects
@projects
@sort_option
@sort_filter
@projects
@projects
@message_template
@message_template
@message_template
@message_template
@message_template
@message_template
@message_template
@drag_evnt
@drag_evnt
答案 0 :(得分:3)
您将MatchData
的实例放在数组中,由此行生成:
var = line.match /@(\w+_\w+|\w+)/
不要被puts
输出混淆,它会在打印实体内部调用to_s
,因此您可以获得实际MatchData
实例的字符串表示。
Array#uniq!
会比较hash
和eql?
的值。要输入字符串,请使用:
var[1] if var[1]
或者,甚至更好:
lines = file.map do |line|
$1 if line =~ /@(\w+_\w+|\w+)/
end.compact.uniq
后者将线条映射到匹配值或nil。 compact
将摆脱nils,uniq
将完成您的预期。