0

我在键和值的列表字典中遇到问题。

我的字典是这样设置的

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 值)。

这里的任何帮助将不胜感激。

4

3 回答 3

6

字符串列表对于字典来说似乎是一个非常奇怪的键,并且会具有其自身的复杂性,但您似乎确信它是正确的,所以我将专注于您的实际问题。

由于Keys是键值的集合List<string>,每个键值都是 a ,因此其中任何一个都应该起作用:

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本质上从整个字典中每个键的集合中选择每个项目。

于 2013-07-08T21:32:08.107 回答
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.

通过检查相应的值总和是否大于(或小于,或等于...)来获取密钥

var newf1 = f.Where(k => k.Value.Sum() > 10).Select(v => v.Key);
于 2013-07-08T21:46:01.327 回答
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;
}
于 2013-07-08T21:31:38.590 回答