列表和词典的问题

本文关键字:问题 列表 | 更新日期: 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);