C#Dictionary <string,list <double =“”>&gt;多键字典

时间:2015-05-08 15:49:03

标签: c# list dictionary converter

我需要存储两次相同的密钥,所以我尝试这样做,但它无法正常工作。有人可以帮我解决这个问题吗?但如果这个词只出现一次,我希望它存储一次,如果它是3,4,5 ..仍然是两次。

private void Meth()
{
    foreach (var word in document)
    {
        dict1.TryGetValue(word.Key, out myValue);

        if (bigDict.ContainsKey(word.Key))
        {
            if (word.Value >= 2)
            {
                testing.Add(word.Key, myValue);
                testing.Add(word.Key, myValue);    
            }
            else
            {
                testing.Add(word.Key, myValue);
            }                                           
        }
        else
        {
            testing.Add(word.Key, 0.123);
        }
    }
}

我考虑过进行查找,但它没有添加,所以我做了:

private Dictionary<Key, List<double>> testing = new Dictionary<Key, List<double>>();

虽然我无法简单地添加&#34;&#34; doubleList<double>

另一个问题是,如果我以后可以这样使用它:

var somethingLikeDict = testing.OrderByDescending(word => word.Value)
        .Take(20)
        .ToDictionary(g => g.Key, g => g.Value);

我该如何解决这个问题?

@edit 这就是我更改代码的方式,我收到一条错误,指出密钥在字典/密钥中不存在

private Dictionary<string, List<double>> testing = new Dictionary<string, List<double>>();

private void MailProbability2()
{
    foreach (var word in document)
    {
        if (bigDict.ContainsKey(word.Key))
        {
            bigDict.TryGetValue(word.Key, out myValue);

            if (word.Value >= 2)
            {
                testing.Add(word.Key, new List<double>() { myValue, myValue});    
            }
            else
            {
                testing[word.Key].Add(myValue);
            }                                      
        }
        else
        {
            testing[word.Key].Add(0.123);
        }
    }
}

bigDict是一个字典,其中包含我想要放入测试字典中的值,其值最多为2。

2 个答案:

答案 0 :(得分:0)

您的方法可能更适合数据的物理模型,例如:

public class Storage
{
     public string Key { get; set; }
     public List<double> Value { get; set; }
}

您有一个物理模型,可以让您简单地构建以下内容:

var storage = List<Storage>();

因此,每当您向Storage添加值时,您都会将该变量存储到List<Storage>中,以便您快速访问。

答案 1 :(得分:0)

您只能在词典中添加一次键。 你可以做的是使用List作为值(如你所试)。 也许这段代码会帮助你:

var myDict = new Dictionary<string, List<double>>();
var newKey = "newKey";
var newValue = 0.5;
if (myDict.ContainsKey(newKey))
{
    var list = myDict[newKey];
    if (list.Count < 2)
    {
        // Add if not yet two entries
        myDict[newKey].Add(newValue);
    }
}
else
{
    myDict.Add(newKey, new List<double>() { newValue });
}

在您的新问题后编辑:

foreach (var word in document)
{
    double myValue;
    // See if the value exists in the big directory
    var valueExists = bigDict.TryGetValue(word.Key, out myValue);
    if (valueExists)
    {
        // See if the testing dict has the same key
        if (testing.ContainsKey(word.Key))
        {
            // It does, add the value to the list
            if (word.Value < 2)
            {
                testing[word.Key].Add(myValue);
            }
        }
        else
        {
            // It doesn't, add the key with the value
            testing.Add(word.Key, new List<double>() { myValue });
        }
    }
}