-2

私は2つの異なるコレクションを持っています。

擬似コード:

// index string by int : Dictionary<int, string>
index = { 0, "a" }, { 1, "b" }, { 2, "c" }

// data : Dictionary<string, List<Data>>
data = {"a", { "data00", "data01"..}}, 
       {"b", {"data20", "data21", "data22"...}}, 
       {"c", {"data4",...}}...

プロジェクト int インデックスをデータ文字列値に変換し、

var result = data.SelectMany ... new { IntIndex, DataValue }

リストを 1 つのシーケンスにフラット化し、インデックスを使用してData値をインデックスとペアにする必要があります。intstring

4

3 に答える 3

1

タイプと値を少し更新しましたが (辞書に重複したキーが含まれており、インデックスが指定されていませんでした)、問題にはなりません。データ型に合わせて関数を簡単に変更できます。

var index = new List<Tuple<int, string>> {Tuple.Create(0, "a"), Tuple.Create(1, "b")};

var data = new Dictionary<string, IEnumerable<string>>()
    {
        {"a", new[] {"data00", "data01"}},
        {"b", new[] {"data20", "data21", "data22"}},
        {"c", new[] {"data4"}}
    };

var result = index
    .Join(data, x => x.Item2, y => y.Key, (x,y) => new KeyValuePair<int, IEnumerable<string>>(x.Item1, y.Value))
    .SelectMany(x => x.Value, (x, y) => new KeyValuePair<int, string>(x.Key, y));
于 2013-06-16T19:00:51.827 に答える
1

の重複が偶然だったと仮定すると、keysこれを試すことができます

Dictionary<int, List<Data>> intData = new Dictionary<int, List<Data>>();

foreach (var iVal in index)
{
     List<Data> tmpList = new List<Data>();

     if (data.TryGetValue(iVal.Value, out tmpList))
     {
         intData.Add(iVal.Key, tmpList);
     }
}

重複したキーを持つことができる場合、辞書は正しい構造ではありません。

于 2013-06-16T19:03:53.740 に答える