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

时间:2015-11-11 02:56:16

标签: c# visual-studio indexer

所以我在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。

据我所知,没有其他方法可以获得我需要的值,以便获得我需要从索引器得到的频率并将其放入等式中。

非常感谢帮助。

1 个答案:

答案 0 :(得分:1)

好吧,伙计们,我一直在考虑这个问题已经太长时间了,似乎没有其他人看到其他解决方案。

此时,我将继续使用逻辑解决方案并将另一个属性添加到MinPriorityQueue类中,即使这违反了我教授的意愿。

无论如何,谢谢大家。