mk3008/Hankaku

[improvement]hankakuListの管理方法

Closed this issue · 3 comments

    /// <summary>
    /// 半角と認識する文字リスト
    /// </summary>
    private static List<char> hankakuList = new List<char>()

存在チェックならHashSetを使用したほうが高速化が望めるかもしれない。
https://learn.microsoft.com/ja-jp/dotnet/api/system.collections.generic.hashset-1?view=net-8.0

参考
https://qiita.com/KazTag/items/68685d2b2f5b8d036403#comment-3468ce77faf80ee0615b

HashSetで速度改善があることが確認できた。

List

Method Mean Error StdDev
CountHankaku 34.36 μs 0.123 μs 0.109 μs

HashSet

Method Mean Error StdDev
CountHankaku 22.64 μs 0.095 μs 0.089 μs

変数にせず、関数内でSwitchで判定した場合、更に速くなった

Switch

Method Mean Error StdDev
CountHankaku 12.43 μs 0.023 μs 0.020 μs

ToHankaku も関数内でSwitch判定にすると高速化されることが確認できた。

Dictionary

Method Mean Error StdDev
ToHankaku 26.90 μs 0.145 μs 0.129 μs

Switch

Method Mean Error StdDev
ToHankaku 12.66 μs 0.060 μs 0.056 μs