我有
下的字典对象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; }
}
我需要做的是,对于字典值集合的特定索引中的每个值,我必须使用逗号分隔的字符串并将其放入List集合中。
e.g。 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];
}
不,它当然不正确。
需要帮助
答案 0 :(得分:2)
试试这个:
Enumerable.Range(0, len).Select( i =>
new NewContextElements {
Value = string.Join(",", dictStr.Values.Select(list => list[i]))
}
);
len
是单个列表中的项目数(在您的示例中,它是两个)。
答案 1 :(得分: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时编写代码。
答案 2 :(得分: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() });
}