我需要存储两次相同的密钥,所以我尝试这样做,但它无法正常工作。有人可以帮我解决这个问题吗?但如果这个词只出现一次,我希望它存储一次,如果它是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; double
至List<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。
答案 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 });
}
}
}