1

私は以下のような辞書オブジェクトを持っています

Dictionary<string, List<string>> dictStr = new Dictionary<string, List<string>>();
dictStr.Add("Culture", new List<string>() { "en-US", "fr-FR" });
dictStr.Add("Affiliate", new List<string>() { "0", "1" });
dictStr.Add("EmailAddress", new List<string>() { "sreetest@test.com", "somemail@test.com" });

そして私は以下のような実体を持っています

public class NewContextElements
{ 
    public string Value { get; set; }
}

私がする必要があるのは、ディクショナリ値コレクションの特定のインデックス内のすべての値について、コンマ区切りの文字列を作成し、それをリストコレクションに配置する必要があるということです。

たとえば、NewContextElementsコレクションには(明らかに実行時に)

var res = new List<NewContextElements>();
res.Add(new NewContextElements { Value = "en-US" + "," + "0" + "," + "sreetest@test.com" });
res.Add(new NewContextElements { Value = "fr-FR" + "," + "1" + "," + "somemail@test.com" });

私は

var len = dictStr.Values.Count;
for (int i = 0; i < len; i++)
{
    var x =dictStr.Values[i];
}

いいえ、もちろん正しくありません。

必要なヘルプ

4

3 に答える 3

2

これを試して:

Enumerable.Range(0, len).Select( i =>
    new NewContextElements {
        Value = string.Join(",", dictStr.Values.Select(list => list[i]))
    }
);

lenは、個々のリスト内のアイテムの数です(この例では、2つです)。

于 2012-05-11T02:52:58.700 に答える
0

データを次のように変換するという意味ですか

1 2 
3 4
5 6

1 3 5
2 4 6

このコードブロックを試してみませんか?いくつかの方法で最適化できます。

var res = new List<NewContextElements>();
int i = dictStr.values.count()
for (int i=0; i < len; i++) {

    NewContextElements newContextElements = new NewContextElements();

    foreach (List<string> list in dictStr) {

        if (newContextElements.value() == null ) {

            newContextElements.value = list[i];

        } else  {

            newContextElements.value += ", " + list[i] );
        }      
    }
    res.add(newContextElements);
}

コードに問題がある場合はお知らせください。実際のIDEを使用せずにコードを記述した場合とほとんど同じです。

于 2012-05-11T03:02:58.547 に答える
0

これは@dasblinkenlightのソリューションのように巧妙ではありませんが、機能するはずです。

        Dictionary<string, List<string>> dictStr = new Dictionary<string, List<string>>( );
        dictStr.Add( "Culture", new List<string>( ) {"en-US", "fr-FR"} );
        dictStr.Add( "Affiliate", new List<string>( ) {"0", "1"} );
        dictStr.Add( "EmailAddress", new List<string>( ) {"sreetest@test.com", "somemail@test.com"} );

        int maxValues = dictStr.Values.Select(l => l.Count).Max(); 
        List<NewContextElements> resultValues = new List<NewContextElements>(dictStr.Keys.Count);
        for (int i = 0; i < maxValues; i++) {
            StringBuilder sb = new StringBuilder();
            string spacer = string.Empty;
            dictStr.Keys.ForEach( k => {
                                    sb.AppendFormat( "{0}{1}", spacer, dictStr[k][i] );
                                    spacer = ", ";
                                  } );
            resultValues.Add( new NewContextElements(  ){ Value = sb.ToString() });
        }
于 2012-05-11T03:06:11.590 に答える