C# 如何使用列表<;字符串>;就像字典里的钥匙一样
我正在尝试创建一个字典,其中键将是预先存在的C# 如何使用列表<;字符串>;就像字典里的钥匙一样,c#,list,dictionary,C#,List,Dictionary,我正在尝试创建一个字典,其中键将是预先存在的列表中的元素,值将是列表,如下所示: List<string> newDictKeys = new List<string>(new []{"12323","432234","45345435"}); List<string> listVal1 = new List<string>(new []{"dfgdfg","
列表
中的元素,值将是列表
,如下所示:
List<string> newDictKeys = new List<string>(new []{"12323","432234","45345435"});
List<string> listVal1 = new List<string>(new []{"dfgdfg","asdfds","wertert"});
List<string> listVal2 = new List<string>(new []{"ZCxzcx","xcvbcvb","gfhjfgj"});
List<List<string>> dictVals = new List<List<string>>();
Dictionary<string,List<List<string>> dict = new Dictionary<string,List<List<string>>();
List<string> newDictKeys = new List<string>(new []{"12323","432234","45345435"});
List<string> listVal1 = new List<string>(new []{"dfgdfg","asdfds","wertert"});
List<string> listVal2 = new List<string>(new []{"ZCxzcx","xcvbcvb","gfhjfgj"});
List<List<string>> dictVals = new List<List<string>>();
dictVals.Add(listVal1);
dictVals.Add(listVal2);
Dictionary<string, List<string>> dict =
newDictKeys.Select((key, index) => new {key, index})
.ToDictionary(entry => entry.key,
entry => new List<string>(){dictVals[0][entry.index], dictVals[1][entry.index]});
List<string> newDictKeys = new List<string>(new []{"12323","432234","45345435"});
List<string> listVal1 = new List<string>(new []{"dfgdfg","asdfds","wertert"});
List<string> listVal2 = new List<string>(new []{"ZCxzcx","xcvbcvb","gfhjfgj"});
List<List<string>> dictVals = new List<List<string>>();
dictVals.Add(listVal1);
dictVals.Add(listVal2);
Dictionary<string, List<List<string>>> dict =
newDictKeys.ToDictionary(key => key, key => dictVals);
var valuesArray = new []{dictVals, dictVals2, ...};
Dictionary<string, List<List<string>>> dict =
newDictKeys.Select((key, index) => new {key, index})
.ToDictionary(entry => entry.key, entry => valuesArray[entry.index]);
根据问题更新更新答案 好的,您希望每个值列表中的第n项作为值,如下所示:
List<string> newDictKeys = new List<string>(new []{"12323","432234","45345435"});
List<string> listVal1 = new List<string>(new []{"dfgdfg","asdfds","wertert"});
List<string> listVal2 = new List<string>(new []{"ZCxzcx","xcvbcvb","gfhjfgj"});
List<List<string>> dictVals = new List<List<string>>();
Dictionary<string,List<List<string>> dict = new Dictionary<string,List<List<string>>();
List<string> newDictKeys = new List<string>(new []{"12323","432234","45345435"});
List<string> listVal1 = new List<string>(new []{"dfgdfg","asdfds","wertert"});
List<string> listVal2 = new List<string>(new []{"ZCxzcx","xcvbcvb","gfhjfgj"});
List<List<string>> dictVals = new List<List<string>>();
dictVals.Add(listVal1);
dictVals.Add(listVal2);
Dictionary<string, List<string>> dict =
newDictKeys.Select((key, index) => new {key, index})
.ToDictionary(entry => entry.key,
entry => new List<string>(){dictVals[0][entry.index], dictVals[1][entry.index]});
List<string> newDictKeys = new List<string>(new []{"12323","432234","45345435"});
List<string> listVal1 = new List<string>(new []{"dfgdfg","asdfds","wertert"});
List<string> listVal2 = new List<string>(new []{"ZCxzcx","xcvbcvb","gfhjfgj"});
List<List<string>> dictVals = new List<List<string>>();
dictVals.Add(listVal1);
dictVals.Add(listVal2);
Dictionary<string, List<List<string>>> dict =
newDictKeys.ToDictionary(key => key, key => dictVals);
var valuesArray = new []{dictVals, dictVals2, ...};
Dictionary<string, List<List<string>>> dict =
newDictKeys.Select((key, index) => new {key, index})
.ToDictionary(entry => entry.key, entry => valuesArray[entry.index]);
原始答案
如果希望newDictKeys
中的每个条目具有相同的值集,则可以如下所示进行映射:
List<string> newDictKeys = new List<string>(new []{"12323","432234","45345435"});
List<string> listVal1 = new List<string>(new []{"dfgdfg","asdfds","wertert"});
List<string> listVal2 = new List<string>(new []{"ZCxzcx","xcvbcvb","gfhjfgj"});
List<List<string>> dictVals = new List<List<string>>();
Dictionary<string,List<List<string>> dict = new Dictionary<string,List<List<string>>();
List<string> newDictKeys = new List<string>(new []{"12323","432234","45345435"});
List<string> listVal1 = new List<string>(new []{"dfgdfg","asdfds","wertert"});
List<string> listVal2 = new List<string>(new []{"ZCxzcx","xcvbcvb","gfhjfgj"});
List<List<string>> dictVals = new List<List<string>>();
dictVals.Add(listVal1);
dictVals.Add(listVal2);
Dictionary<string, List<string>> dict =
newDictKeys.Select((key, index) => new {key, index})
.ToDictionary(entry => entry.key,
entry => new List<string>(){dictVals[0][entry.index], dictVals[1][entry.index]});
List<string> newDictKeys = new List<string>(new []{"12323","432234","45345435"});
List<string> listVal1 = new List<string>(new []{"dfgdfg","asdfds","wertert"});
List<string> listVal2 = new List<string>(new []{"ZCxzcx","xcvbcvb","gfhjfgj"});
List<List<string>> dictVals = new List<List<string>>();
dictVals.Add(listVal1);
dictVals.Add(listVal2);
Dictionary<string, List<List<string>>> dict =
newDictKeys.ToDictionary(key => key, key => dictVals);
var valuesArray = new []{dictVals, dictVals2, ...};
Dictionary<string, List<List<string>>> dict =
newDictKeys.Select((key, index) => new {key, index})
.ToDictionary(entry => entry.key, entry => valuesArray[entry.index]);
值数组也可以是一个列表,只要索引器可以检索它的值。根据问题更新更新答案。
好的,您希望每个值列表中的第n项作为值,如下所示:
List<string> newDictKeys = new List<string>(new []{"12323","432234","45345435"});
List<string> listVal1 = new List<string>(new []{"dfgdfg","asdfds","wertert"});
List<string> listVal2 = new List<string>(new []{"ZCxzcx","xcvbcvb","gfhjfgj"});
List<List<string>> dictVals = new List<List<string>>();
Dictionary<string,List<List<string>> dict = new Dictionary<string,List<List<string>>();
List<string> newDictKeys = new List<string>(new []{"12323","432234","45345435"});
List<string> listVal1 = new List<string>(new []{"dfgdfg","asdfds","wertert"});
List<string> listVal2 = new List<string>(new []{"ZCxzcx","xcvbcvb","gfhjfgj"});
List<List<string>> dictVals = new List<List<string>>();
dictVals.Add(listVal1);
dictVals.Add(listVal2);
Dictionary<string, List<string>> dict =
newDictKeys.Select((key, index) => new {key, index})
.ToDictionary(entry => entry.key,
entry => new List<string>(){dictVals[0][entry.index], dictVals[1][entry.index]});
List<string> newDictKeys = new List<string>(new []{"12323","432234","45345435"});
List<string> listVal1 = new List<string>(new []{"dfgdfg","asdfds","wertert"});
List<string> listVal2 = new List<string>(new []{"ZCxzcx","xcvbcvb","gfhjfgj"});
List<List<string>> dictVals = new List<List<string>>();
dictVals.Add(listVal1);
dictVals.Add(listVal2);
Dictionary<string, List<List<string>>> dict =
newDictKeys.ToDictionary(key => key, key => dictVals);
var valuesArray = new []{dictVals, dictVals2, ...};
Dictionary<string, List<List<string>>> dict =
newDictKeys.Select((key, index) => new {key, index})
.ToDictionary(entry => entry.key, entry => valuesArray[entry.index]);
原始答案
如果希望newDictKeys
中的每个条目具有相同的值集,则可以如下所示进行映射:
List<string> newDictKeys = new List<string>(new []{"12323","432234","45345435"});
List<string> listVal1 = new List<string>(new []{"dfgdfg","asdfds","wertert"});
List<string> listVal2 = new List<string>(new []{"ZCxzcx","xcvbcvb","gfhjfgj"});
List<List<string>> dictVals = new List<List<string>>();
Dictionary<string,List<List<string>> dict = new Dictionary<string,List<List<string>>();
List<string> newDictKeys = new List<string>(new []{"12323","432234","45345435"});
List<string> listVal1 = new List<string>(new []{"dfgdfg","asdfds","wertert"});
List<string> listVal2 = new List<string>(new []{"ZCxzcx","xcvbcvb","gfhjfgj"});
List<List<string>> dictVals = new List<List<string>>();
dictVals.Add(listVal1);
dictVals.Add(listVal2);
Dictionary<string, List<string>> dict =
newDictKeys.Select((key, index) => new {key, index})
.ToDictionary(entry => entry.key,
entry => new List<string>(){dictVals[0][entry.index], dictVals[1][entry.index]});
List<string> newDictKeys = new List<string>(new []{"12323","432234","45345435"});
List<string> listVal1 = new List<string>(new []{"dfgdfg","asdfds","wertert"});
List<string> listVal2 = new List<string>(new []{"ZCxzcx","xcvbcvb","gfhjfgj"});
List<List<string>> dictVals = new List<List<string>>();
dictVals.Add(listVal1);
dictVals.Add(listVal2);
Dictionary<string, List<List<string>>> dict =
newDictKeys.ToDictionary(key => key, key => dictVals);
var valuesArray = new []{dictVals, dictVals2, ...};
Dictionary<string, List<List<string>>> dict =
newDictKeys.Select((key, index) => new {key, index})
.ToDictionary(entry => entry.key, entry => valuesArray[entry.index]);
valuesArray
也可以是一个列表,只要它的值可以由索引器检索。既然将为同一个键存储两个列表,为什么不将两个列表组合在一起
List<string> newDictKeys = new List<string>{ "12323", "432234", "45345435"};
List<string> t = new List<string> { "dfgdfg", "asdfds", "wertert" };
List<string> t2 = new List<string>{ "ZCxzcx", "xcvbcvb", "gfhjfgj" };
t.AddRange(t2);
Dictionary<string,List<string>> dict = newDictKeys.ToDictionary(key => key, key => t);
List newDictKeys=新列表{“12323”、“432234”、“45345435”};
列表t=新列表{“dfgdfg”、“asdfds”、“WERTER”};
列表t2=新列表{“ZCxzcx”、“xcvbcvb”、“gfhjfgj”};
t、 AddRange(t2);
Dictionary dict=newDictKeys.ToDictionary(key=>key,key=>t);
更新
使用对象列表:
List<string> newDictKeys = new List<string> { "12323", "432234", "45345435" };
List<string> t = new List<string> { "dfgdfg", "asdfds", "wertert" };
List<string> t2 = new List<string> { "ZCxzcx", "xcvbcvb", "gfhjfgj" };
Dictionary<string, List<object>> dict = newDictKeys.ToDictionary(key => key, key => new List<object> {t, t2});
List newDictKeys=新列表{“12323”、“432234”、“45345435”};
列表t=新列表{“dfgdfg”、“asdfds”、“WERTER”};
列表t2=新列表{“ZCxzcx”、“xcvbcvb”、“gfhjfgj”};
Dictionary dict=newDictKeys.ToDictionary(key=>key,key=>newlist{t,t2});
更新2
这应该是一个技巧:
List<string> newDictKeys = new List<string> { "12323", "432234", "45345435" };
List<string> t = new List<string> { "dfgdfg", "asdfds", "wertert" };
List<string> t2 = new List<string> { "ZCxzcx", "xcvbcvb", "gfhjfgj" };
Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>();
foreach (var key in newDictKeys.Where(key => t.Count > 0 && t2.Count > 0))
{
dict.Add(key, new List<string> {t.FirstOrDefault(), t2.FirstOrDefault()});
t.RemoveAt(0);
t2.RemoveAt(0);
}
List newDictKeys=新列表{“12323”、“432234”、“45345435”};
列表t=新列表{“dfgdfg”、“asdfds”、“WERTER”};
列表t2=新列表{“ZCxzcx”、“xcvbcvb”、“gfhjfgj”};
Dictionary dict=新字典();
foreach(newDictKeys.Where中的var键(key=>t.Count>0&&t2.Count>0))
{
dict.Add(键,新列表{t.FirstOrDefault(),t2.FirstOrDefault()});
t、 RemoveAt(0);
t2.移除(0);
}
更新3
排队
List<string> newDictKeys = new List<string> { "12323", "432234", "45345435" };
Queue<string> t = new Queue<string> (new []{ "dfgdfg", "asdfds", "wertert" });
Queue<string> t2 = new Queue<string>(new[] { "ZCxzcx", "xcvbcvb", "gfhjfgj" });
Dictionary<string, List<string>> dict = newDictKeys
.Where(key => t.Count > 0 && t2.Count > 0)
.ToDictionary(key => key, key => new List<string> {t.Dequeue(), t2.Dequeue()});
List newDictKeys=新列表{“12323”、“432234”、“45345435”};
队列t=新队列(新[]{“dfgdfg”、“asdfds”、“wertert”});
队列t2=新队列(新[]{“ZCxzcx”、“xcvbcvb”、“gfhjfgj”});
Dictionary dict=newdictkey
.Where(key=>t.Count>0&&t2.Count>0)
.ToDictionary(key=>key,key=>newlist{t.Dequeue(),t2.Dequeue()});
既然将为同一个键存储两个列表,为什么不将两个列表组合在一起
List<string> newDictKeys = new List<string>{ "12323", "432234", "45345435"};
List<string> t = new List<string> { "dfgdfg", "asdfds", "wertert" };
List<string> t2 = new List<string>{ "ZCxzcx", "xcvbcvb", "gfhjfgj" };
t.AddRange(t2);
Dictionary<string,List<string>> dict = newDictKeys.ToDictionary(key => key, key => t);
List newDictKeys=新列表{“12323”、“432234”、“45345435”};
列表t=新列表{“dfgdfg”、“asdfds”、“WERTER”};
列表t2=新列表{“ZCxzcx”、“xcvbcvb”、“gfhjfgj”};
t、 AddRange(t2);
Dictionary dict=newDictKeys.ToDictionary(key=>key,key=>t);
更新
使用对象列表:
List<string> newDictKeys = new List<string> { "12323", "432234", "45345435" };
List<string> t = new List<string> { "dfgdfg", "asdfds", "wertert" };
List<string> t2 = new List<string> { "ZCxzcx", "xcvbcvb", "gfhjfgj" };
Dictionary<string, List<object>> dict = newDictKeys.ToDictionary(key => key, key => new List<object> {t, t2});
List newDictKeys=新列表{“12323”、“432234”、“45345435”};
列表t=新列表{“dfgdfg”、“asdfds”、“WERTER”};
列表t2=新列表{“ZCxzcx”、“xcvbcvb”、“gfhjfgj”};
Dictionary dict=newDictKeys.ToDictionary(key=>key,key=>newlist{t,t2});
更新2
这应该是一个技巧:
List<string> newDictKeys = new List<string> { "12323", "432234", "45345435" };
List<string> t = new List<string> { "dfgdfg", "asdfds", "wertert" };
List<string> t2 = new List<string> { "ZCxzcx", "xcvbcvb", "gfhjfgj" };
Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>();
foreach (var key in newDictKeys.Where(key => t.Count > 0 && t2.Count > 0))
{
dict.Add(key, new List<string> {t.FirstOrDefault(), t2.FirstOrDefault()});
t.RemoveAt(0);
t2.RemoveAt(0);
}
List newDictKeys=新列表{“12323”、“432234”、“45345435”};
列表t=新列表{“dfgdfg”、“asdfds”、“WERTER”};
列表t2=新列表{“ZCxzcx”、“xcvbcvb”、“gfhjfgj”};
Dictionary dict=新字典();
foreach(newDictKeys.Where中的var键(key=>t.Count>0&&t2.Count>0))
{
dict.Add(键,新列表{t.FirstOrDefault(),t2.FirstOrDefault()});
t、 RemoveAt(0);
t2.移除(0);
}
更新3
排队
List<string> newDictKeys = new List<string> { "12323", "432234", "45345435" };
Queue<string> t = new Queue<string> (new []{ "dfgdfg", "asdfds", "wertert" });
Queue<string> t2 = new Queue<string>(new[] { "ZCxzcx", "xcvbcvb", "gfhjfgj" });
Dictionary<string, List<string>> dict = newDictKeys
.Where(key => t.Count > 0 && t2.Count > 0)
.ToDictionary(key => key, key => new List<string> {t.Dequeue(), t2.Dequeue()});
List newdictkey=新列表{“12323”、“432234”、“45345435”};
队列t=新队列(新[]{“dfgdfg”、“asdfds”、“wertert”});
队列t2=新队列(新[]{“ZCxzcx”、“xcvbcvb”、“gfhjfgj”});
Dictionary dict=newdictkey
.Where(key=>t.Count>0&&t2.Count>0)
.ToDictionary(key=>key,key=>newlist{t.Dequeue(),t2.Dequeue()});
for循环将很简单。为此,您需要在字典的构造函数中使用IEqualityComparer
,因为您不能覆盖列表中的Equals
和GetHashCode
方法。是否希望每个键的值相同?或者你会有一堆列表
对象需要映射到newDictKeys
中的每个键吗?@JohnM.Wright我刚刚用澄清更新了帖子编辑后,看起来你只需要在每个值子列表中添加一项?或者您只是想让值成为每个listVal
集合中第n项的集合吗?for循环很简单。.您需要在字典的构造函数中使用IEqualityComparer
来实现此目的,因为您不能重写列表
。是否希望每个键的值相同?或者你会有一堆列表
对象需要映射到newDictKeys
中的每个键吗?@JohnM.Wright我刚刚用澄清更新了帖子编辑后,看起来你只需要在每个值子列表中添加一项?或者您只是希望这些值是每个listVal
集合中第n项的集合?您是在用列表t2扩展列表t吗?是的,您是对的。我只是想知道你的最新情况。但我不确定这样做的目的是什么?我不能那样做。我需要的是将列表t和t2分开,并一起映射到NewDictKeys中的每个索引,如果它是我建议给我们的新应用程序的话