0

私はLINQを初めて使用し、誰かがこのクエリを記述してデータを変換するのを手伝ってくれることを望んでいます。私はDictionary<DateTime, string>このようなデータを含んでいます...

<01/07/12 00:00, "23,5,654,12,55,45,12,46,673,325,377,234,867,43,1,123,53,12,23,667,23,45,456,87">

<02/07/12 00:00, "22,63,567,13,64,6,4,64,7,2,5,234,667,787,326,234,64,24,5,76,23,556,77,34">

<03/07/12 00:00, "3,746,34,623,5,76,23,6,23,2,78,4,234,76,4,6,8,7,4,3,7645,23,34,6">

等...

このディクショナリには、日付であるキーと、24個の数値(00:00から始まる1日の時間ごとに1つ)を含むCSV文字列である値があります。辞書に変換したいのですが

<01/07/12 00:00, 23>

<01/07/12 01:00, 5>

<01/07/12 02:00, 654>

等...

私はしばらくの間、SelectManyを使用することに答えがあると考えていましたが、何も機能しません。いくつかのループを使用してそれを実行できることはわかっていますが、LINQの実装を本当に望んでいます。

あなたが私を助けることができればどうもありがとう。コリン。

4

1 に答える 1

3

これはどう:

var dict = new Dictionary<DateTime, string>
{
    { new DateTime(2012, 7, 1), 
        "23,5,654,12,55,45,12,46,673,325,377,234,867,43,1,123,53,12,23,667,23,45,456,87" 
    },
    { new DateTime(2012, 7, 2), 
        "22,63,567,13,64,6,4,64,7,2,5,234,667,787,326,234,64,24,5,76,23,556,77,34" 
    }
};

dict.Select (d => d.Value.Split(new []{','})
    .Select ((v,i) => new {
        DateTime=d.Key.AddHours(i), Value=v}))
    .SelectMany (d => d)
    .ToDictionary (d => d.DateTime, d => int.Parse(d.Value));
于 2012-05-04T18:16:18.260 に答える