我有一个任务,我需要为Dictionary中的一个键设置两个值。 在web中找到的解决方案是创建具有两个字段的新类,并将其作为值使用它。
但是如何从Dictionary&for;循环中为我的CustomClassObjects赋值? 这是代码:
Dictionary<char, Huffmans> HuffmanDictionary = new Dictionary<char, Huffmans>();
Program.text = File.ReadAllText(Program.sourcetext);
char character;
for (int i = 0; i < Program.text.Length; i++)
{
counter++;
character = Convert.ToChar(Program.text[i]);
if (HuffmanDictionary.ContainsKey(character))
HuffmanDictionary[character].probability++;
else
HuffmanDictionary.Add(character, 1);// here is the problem, obviously program can't assign value directly to class...
}
public class Huffmans
{
public int code = 0;
public double probability = 0;
}
基本上,我只需要分配&#34;概率&#34;这一步的价值观。我应该打电话给#34; Huffmans&#34;在每次迭代?
非常感谢任何帮助,Alex
答案 0 :(得分:1)
您需要在添加值之前实例化您的类:
HuffmanDictionary.Add(character, 1);
应该是:
HuffmanDictionary.Add(character, new Huffmans{ code = 1 });
或者,您可以为您的类创建构造函数:
public class Huffmans
{
public Huffmans(int _code)
{
code = _code;
}
public int code = 0;
public double probability = 0;
}
然后你可以这样做:
HuffmanDictionary.Add(character, new Huffmans(1));
修改强> 更多澄清:
HuffmanDictionary.Add(character, 1);
失败,因为您将类型int
传递到字典中,但期望类型为Huffmans
。我们的字典是:Dictionary<char,Huffmans>()
HuffmanDictionary.Add(character, new Huffmans{ code = 1 });
有效,因为现在我们正在创建Huffmans
类型的新对象,我们将code value
设置为1.
不确定我是否正确理解了您的评论,但实际上我们的做法与:
相同var newHuffmans = new Huffmans{ code = 1 };
HuffmanDictionary.Add(character, newHuffmans);
但是我们不是写出所有代码并使用我们的类创建命名变量,而是跳过它并将其直接传递到字典中。