Abbrev 모듈
Abbrev 모듈
주어진 문자열 집합에서 모호하지 않은 약어 집합을 계산해 주는 모듈이에요.
require 'abbrev'
require 'pp'
pp Abbrev.abbrev(['ruby'])
#=> {"ruby"=>"ruby", "rub"=>"ruby", "ru"=>"ruby", "r"=>"ruby"}
pp Abbrev.abbrev(%w{ ruby rules })
위 코드는 이렇게 생성해요.
{ "ruby" => "ruby",
"rub" => "ruby",
"rules" => "rules",
"rule" => "rules",
"rul" => "rules" }
배열 코어 확장인 Array#abbrev도 제공해요.
pp %w{ summer winter }.abbrev
이 코드는 이렇게 생성해요.
{ "summer" => "summer",
"summe" => "summer",
"summ" => "summer",
"sum" => "summer",
"su" => "summer",
"s" => "summer",
"winter" => "winter",
"winte" => "winter",
"wint" => "winter",
"win" => "winter",
"wi" => "winter",
"w" => "winter" }
출처: Ruby 3.3 API
Public Class Methods
abbrev(words, pattern = nil)
문자열 집합이 주어지면 그 문자열들의 모호하지 않은 약어 집합을 계산하고, 키가 가능한 모든 약어이고 값이 전체 문자열인 해시를 반환해요.
그래서 주어진 단어가 "car"와 "cone"이라면, "car"를 가리키는 키는 "ca"와 "car"이고, "cone"을 가리키는 키는 "co", "con", "cone"이 돼요.
require 'abbrev'
Abbrev.abbrev(%w{ car cone })
#=> {"ca"=>"car", "con"=>"cone", "co"=>"cone", "car"=>"car", "cone"=>"cone"}
선택적인 pattern 파라미터는 패턴(Regexp) 또는 문자열이에요. 패턴에 매칭되거나 문자열로 시작하는 입력 문자열만 결과 해시에 포함돼요.
Abbrev.abbrev(%w{car box cone crab}, /b/)
#=> {"box"=>"box", "bo"=>"box", "b"=>"box", "crab" => "crab"}
Abbrev.abbrev(%w{car box cone}, 'ca')
#=> {"car"=>"car", "ca"=>"car"}
# File lib/abbrev.rb, line 74
def abbrev(words, pattern = nil)
table = {}
seen = Hash.new(0)
if pattern.is_a?(String)
pattern = /\A#{Regexp.quote(pattern)}/ # regard as a prefix
end
words.each do |word|
next if word.empty?
word.size.downto(1) { |len|
abbrev = word[0...len]
next if pattern && pattern !~ abbrev
case seen[abbrev] += 1
when 1
table[abbrev] = word
when 2
table.delete(abbrev)
else
break
end
}
end
words.each do |word|
next if pattern && pattern !~ word
table[word] = word
end
table
end
더 알아보기
Array#abbrev확장으로 배열에서 바로 약어를 계산할 수 있어요.