Skip + Take = Substring になる?

posted in: C# | 0

System.Linq.Enumerable のメソッドをいくつか紹介します。
利用場面はあまり思いつきませんが、例えば2番目と3番目の要素にアクセスするコードは、以下のように書くことができます。

実行結果:

少し無理気味ですが、string に対して同様のことを行うことで、
string.Substring() の代わりにならないか、と考えてみました。

実行結果:

私は、「string.Substring() の第1引数が、0オリジンで開始位置を指定する」
ということをよく忘れるのですが、(忘れるな、という話もある)
Skip(1).Take(2) のように書ければ、「1つスキップして2つ取る」と素直に読め、
意味を間違えることがないかと思います。

ただ、ToString() と書けないのが残念な点と、性能の問題があります。

s.Skip(1).Take(2).ToStr() を 10M回実行: 2,537msec
s.Substring(1, 2) を 10M回実行: 177msec

圧倒的な性能差が出ました。

の部分を

と書き換えると、3,598msec とさらに悪くなり、

としてみても、1,790msec と改善はされるものの string.Substring() には
はるか及びませんでした。

以上です。

LINEで送る
Pocket