所以我在Visual Studio 2015中使用一些自定义类。其中一个名为MinPriorityQueue,它是一个优先级队列,在这种情况下,允许我通过属性MinimumPriority检索队列中的MinimumPriority对象。还有一个名为RemoveMinimumPriority的方法,它是不言自明的。
我不允许修改此方法,这是我们为此作业预先制作的,否则我会找到一个简单的解决方案。
我的程序是为了比较两个文本文件,并根据某个等式返回一个值,就这篇文章而言,这个等式并不重要。我遇到的问题是在我的UserInterface代码中。这是我的点击事件,用于分析'我的GUI上的按钮。
private void uxAnalyze_Click(object sender, EventArgs e)
{
Dictionary<string, StoreWord> dictionary = new Dictionary<string, StoreWord>();
const int _numFiles = 2;
MinPriorityQueue<float, StoreInfo> minQueue = new MinPriorityQueue<float, StoreInfo>();
int numWords1 = 0;
int numWords2 = 0;
//Process Both Input Files
using (StreamReader sr = new StreamReader(uxTextBox1.Text))
{
for (int i = 0; i < _numFiles; i++)
{
if (i == 0)
{
dictionary = ReadFile(dictionary, uxTextBox1.Text, i, out numWords1);
}
if (i == 1)
{
dictionary = ReadFile(dictionary, uxTextBox2.Text, i, out numWords2);
}
}
}
int[] numWords = new int[2];
numWords[0] = numWords1;
numWords[1] = numWords2;
//Get 50 Words with Highest Combined Frequencies
foreach(var entry in dictionary.Values)
{
StoreInfo freq = new StoreInfo(entry, numWords);
minQueue.Add(freq, Convert.ToSingle(entry[0] + entry[1]));
if(minQueue.Count > 50)
{
minQueue.RemoveMinimumPriority();
}
}
//Compute and Display the Difference Measure
float diffMeasure = 0;
float temp = 0;
foreach( x in minQueue)
for (int i = 0; i < minQueue.Count; i++)
{
temp += minQueue.????; //This is where my problem stems
}
diffMeasure = (float)(100 * Math.Sqrt(temp));
}
从最后几行开始,您会看到一条评论,显示我的问题所在。 MinPriorityQueue(minQueue)有两个参数,Priority和Value,其中Priority是Float,Value是另一个名为StoreInfo的类。此类有一个Indexer,它将根据索引的内容返回不同文件中的信息。在这种情况下,只有两个文件。例如:StoreInfo [i]返回第i个文本文件中单词的频率。
理想情况下,我的代码看起来像这样:
for (int i = 0; i < minQueue.Count; i++)
{
temp += (minQueue.minimumValue[0] - minQueue.minimumValue[1])*(minQueue.minimumValue[0] - minQueue.minimumValue[1]);
}
diffMeasure = (float)(100 * Math.Sqrt(temp));
问题是,这需要一个我无法访问的minimumValue属性。我只有minimumPriority。
据我所知,没有其他方法可以获得我需要的值,以便获得我需要从索引器得到的频率并将其放入等式中。
非常感谢帮助。
答案 0 :(得分:1)
好吧,伙计们,我一直在考虑这个问题已经太长时间了,似乎没有其他人看到其他解决方案。
此时,我将继续使用逻辑解决方案并将另一个属性添加到MinPriorityQueue
类中,即使这违反了我教授的意愿。
无论如何,谢谢大家。