модуль 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" }
Он также предоставляет расширение массива core, 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" }
Методы публичного класса
# File lib/abbrev.rb, line 73
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 Для данного набора строк вычисляет набор недвусмысленных сокращений для этих строк и возвращает хэш, где ключи — это все возможные сокращения, а значения — полные строки.
Таким образом, если задано words «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 — это шаблон или строка. В выходной хэш включаются только входные строки, которые соответствуют шаблону или начинаются с указанной строки.
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 73
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 Для данного набора строк вычисляет набор недвусмысленных сокращений для этих строк и возвращает хэш, где ключи — это все возможные сокращения, а значения — полные строки.
Таким образом, если задано words «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 — это шаблон или строка. В выходной хэш включаются только входные строки, которые соответствуют шаблону или начинаются с указанной строки.
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"}
Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.