自定义队列 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 中,尽管这违背了我教授的意愿。

谢谢大家。