列表和词典的问题
本文关键字:问题 列表 | 更新日期: 2023-09-27 18:21:29
键和值的列表字典出现问题。
我的字典被设置为这个
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。值,值)。
如有任何帮助,我们将不胜感激。
字符串列表对于字典来说似乎是一个非常奇怪的键,并且会有其自身的复杂性,但您似乎相信它是正确的,所以我将重点讨论您的实际问题。
由于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
本质上是从整个字典中每个关键字内的集合中选择每个项。
Lol这可能是我一段时间以来看到的最有趣的事情。
好吧。在c#中有一个称为KeyValuePair<TKey, TValue>
的结构。然后,您可以使用foreach迭代整个数据集,并访问您想要的内容。
foreach(KeyValuePair<<List<string>,List<double>> item in f) {
List<string> key = item.key;
List<double> value = item.value;
}
如果只有一个键,意味着一个字符串列表:
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.
通过检查相应的值总和是否高于(或小于,或等于…)来获得密钥
var newf1 = f.Where(k => k.Value.Sum() > 10).Select(v => v.Key);