我遇到了Key和Value的列表字典问题。
我的字典设置为
Dictionary<List<string>,List<double>> f = new Dictionary<List<string>,List<double>>();
(出于非常具体的原因,就像这样)。
我的问题是如何将两个列表放入他们自己的列表中。我试过以下
List<string> s = new List<string>(f.Keys);
List<string> s = f.Select(kvp=>kvp.Keys).ToList()
List<string> s = f.Select(kvp=>kvp.Keys);
List<string> s = f.Keys;
以及使用IEnumerable的变体。无论我做什么,我似乎无法检索密钥(或使用f.Values,值)。
任何帮助都将不胜感激。
答案 0 :(得分:6)
字符串列表对于字典而言似乎是一个非常奇怪的键,并且会有其自身的复杂性,但您似乎确信它是正确的,因此我将专注于您的实际问题。
由于Keys
是集合的关键值,每个关键值都是List<string>
,因此其中任何一个都应该有效:
List<List<string>> s = f.Select(kvp=>kvp.Key).ToList();
List<List<string>> s = f.Keys.ToList();
如果您希望将所有字符串作为单个列表(基本上将所有列表连接在一起),您可以使用:
List<string> s2 = f.SelectMany(kvp => kvp.Key).ToList();
SelectMany
实际上从整个字典中的每个键中的集合中选择每个项目。
答案 1 :(得分:0)
大声笑这可能是我偶尔看到的最有趣的事情。
好的。在c#中有一个名为KeyValuePair<TKey, TValue>
的结构。然后,您可以使用foreach遍历整个数据集并访问所需的内容。
foreach(KeyValuePair<<List<string>,List<double>> item in f) {
List<string> key = item.key;
List<double> value = item.value;
}
答案 2 :(得分:0)
如果您只有1个键,则表示1个字符串列表:
List<string> newf = f.Keys.ElementAt(0);
如果你有更多的地方另一个索引。 或者检查列表是否为某个项目,以便检索列表:
List<string> newf = f.Keys.Single(k => k.Contains("SomeString"));
//this must exist or it will throw exception.
通过检查相应的值sum是否高于(或更小,或等于......)来获取密钥
var newf1 = f.Where(k => k.Value.Sum() > 10).Select(v => v.Key);