自定义队列 Class 迭代和数据检索 C#
Custom Queue Class Iteration and Data Retrieval C#
所以我在 Visual Studio 2015 年使用一些自定义 classes。其中之一称为 MinPriorityQueue,它是一个优先级队列,在这种情况下,允许我通过 属性 MinimumPriority 检索队列中 MinimumPriority 的对象。还有一个叫做 RemoveMinimumPriority 的方法,不用解释。
我不允许修改这个方法,它是为我们这个任务预先制定的,否则我已经找到了一个简单的解决方案。
我的程序旨在比较两个文本文件,return 一个基于某个方程的值,就此 post 而言,该方程并不重要。我遇到的问题是在我的 UserInterface 代码中。这是我的 GUI 上 'Analyze' 按钮的点击事件。
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是另一个class,叫做StoreInfo。此 class 有一个索引器,它将 return 来自不同文件的信息,具体取决于索引是什么。在本例中,只有两个文件。例如: StoreInfo[i] returns 第 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));
问题是,这需要一个最小值 属性,我无法访问它。我只有 minimumPriority.
据我所知,没有其他方法可以让我获得我需要的值,以便从索引器获得我需要的频率并将其放入方程中。
非常感谢您的帮助。
好的伙计们,我已经考虑这个问题太久了,而且似乎也没有其他人看到其他解决方案。
在这一点上,我将采用合乎逻辑的解决方案并将另一个 属性 添加到 MinPriorityQueue
class 中,尽管这违背了我教授的意愿。
谢谢大家。
所以我在 Visual Studio 2015 年使用一些自定义 classes。其中之一称为 MinPriorityQueue,它是一个优先级队列,在这种情况下,允许我通过 属性 MinimumPriority 检索队列中 MinimumPriority 的对象。还有一个叫做 RemoveMinimumPriority 的方法,不用解释。
我不允许修改这个方法,它是为我们这个任务预先制定的,否则我已经找到了一个简单的解决方案。
我的程序旨在比较两个文本文件,return 一个基于某个方程的值,就此 post 而言,该方程并不重要。我遇到的问题是在我的 UserInterface 代码中。这是我的 GUI 上 'Analyze' 按钮的点击事件。
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是另一个class,叫做StoreInfo。此 class 有一个索引器,它将 return 来自不同文件的信息,具体取决于索引是什么。在本例中,只有两个文件。例如: StoreInfo[i] returns 第 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));
问题是,这需要一个最小值 属性,我无法访问它。我只有 minimumPriority.
据我所知,没有其他方法可以让我获得我需要的值,以便从索引器获得我需要的频率并将其放入方程中。
非常感谢您的帮助。
好的伙计们,我已经考虑这个问题太久了,而且似乎也没有其他人看到其他解决方案。
在这一点上,我将采用合乎逻辑的解决方案并将另一个 属性 添加到 MinPriorityQueue
class 中,尽管这违背了我教授的意愿。
谢谢大家。