自定义队列类迭代与数据检索C#
本文关键字:数据 检索 迭代 队列 自定义 | 更新日期: 2023-09-27 18:21:31
所以我在Visual Studio 2015中使用一些自定义类。其中一个被称为MinPriorityQueue,它是一个优先级队列,在这种情况下,它允许我通过属性MinimumPriority在队列中检索MinimumPPriority的对象。还有一个名为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。
就我所见,我没有其他方法可以获得所需的值,以便从索引器中获得频率并将其放入方程中。
非常感谢您的帮助。
好吧,伙计们,我已经考虑了太久了,似乎其他人也没有看到其他解决方案。
在这一点上,我只想使用逻辑解决方案,并将另一个属性添加到MinPriorityQueue
类中,尽管这违背了我的教授的意愿。
无论如何,谢谢大家。