かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

stringの配列からDictionaryへの変換 その3

id:neueccさんが、もう1つやり方を教えてくれました。自分では思いつきませんでしたが、以下のコードになります。

var array = new[] { "1", "one", "2", "two" };
var dict = array
	.Zip(array.Skip(1), Tuple.Create)
	.Where((_, i) => i % 2 == 0)
	.ToDictionary(
		v => v.Item1,
		v => v.Item2);

1つ要素をずらした自分自身と結合して絞り込んでDictionaryへ変換・・・。という感じです。なるほど!!

ちょっと様子を追ってみると・・・Zipメソッドの所で以下のようなTupleが作られます。

Item1 Item2
1 one
one 2
2 two

奇数行は、不要なデータなのでWhereで絞り込みます。

Item1 Item2
1 one
2 two

あとはItem1をキーに、Item2を値にしたDictionaryに変換って寸法です。頭やわらかくしないとだな〜。関数脳になりたい。