列表和词典的问题

时间:2013-07-08 21:27:35

标签: c#

我遇到了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,值)。

任何帮助都将不胜感激。

3 个答案:

答案 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);