自定义队列类迭代与数据检索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。

就我所见,我没有其他方法可以获得所需的值,以便从索引器中获得频率并将其放入方程中。

非常感谢您的帮助。

自定义队列类迭代与数据检索C#

好吧,伙计们,我已经考虑了太久了,似乎其他人也没有看到其他解决方案。

在这一点上,我只想使用逻辑解决方案,并将另一个属性添加到MinPriorityQueue类中,尽管这违背了我的教授的意愿。

无论如何,谢谢大家。