Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用列表<;字符串>;就像字典里的钥匙一样_C#_List_Dictionary - Fatal编程技术网

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中的每个索引,如果它是我建议给我们的新应用程序的话