-
Notifications
You must be signed in to change notification settings - Fork 24
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
名前を先頭一致で検索できるようにした #11
Conversation
PR ありがとうございます。 |
確認しました。バッチリだと思います! 元々実装されていた検索ロジックが微妙だったのでこの機会に書きなおしてみました。 結果:
コード: Benchmark.bm do |x|
x.report('bench1') {
1000.times {
self.bench1(args[:name])
}
}
x.report('bench2') {
1000.times {
self.bench2(args[:name])
}
}
end
def self.bench1(name)
result = Mapping.data.select { |_, v|
v if v.values.map{|v2| v2 !~ /^#{name.downcase}/ }.delete_if{|i| i == true}.length > 0
}.first
return if result.nil?
result[0]
end
def self.bench2(name)
name = name.downcase
Mapping.data.each do |m|
if m[1][:name].start_with?(name) || m[1][:name_e].start_with?(name)
return m[0]
end
end
nil
end また、テストも追加しました。 describe '都道府県名(先頭一致)' do
let(:pref) { JpPrefecture::Prefecture.find(name: '東京') }
it { expect(pref.name).to eq '東京都' }
context 'マッチする都道府県が複数あった場合' do
let(:pref) { JpPrefecture::Prefecture.find(name: '宮') }
it { expect(pref.name).to eq '宮城県' }
end
context 'マッチする都道府県が複数あった場合(英語表記)' do
let(:pref) { JpPrefecture::Prefecture.find(name: 'miya') }
it { expect(pref.name_e).to eq 'Miyagi' }
end
end |
ロジックですが、さらに効率のいい方法をもいついて実装しなおしました。 テストケースでは、"東京"が東京、"京都"が京都になれば完璧だとおもいます。 あとKernel methodである"p"がoverrideされていたので、ついでに直しておきました。 |
確かにそうですね...。ありがとうございます 🙇 それではマージします。後はこちらで手を加えて本日 14-15 時ぐらいに Gem をアップデートします。 |
v0.6.0 をリリースしました。 ありがとうございました!:smile: |
ありがとうございます~ |
東京、京都などの都道府県のsuffixがない状態で検索したかったので、検索ロジックを修正しました。
検索オーダーがhas_value?に加えて増えていますが、最大47^2なので問題ないということで……
なお、京都→京都府、東京→東京都を実現するために、先頭一致にしています