かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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に変換って寸法です。頭やわらかくしないとだな〜。関数脳になりたい。