使用sortedList计算List中的单词

时间:2013-11-22 06:22:02

标签: c# sortedlist

对于我的作业,我必须使用SortedList来计算List中的单词,其中SortedList获取每个条目并在插入之前按字母顺序对其进行排序。在向用户显示数据时,显示的数据应根据值而不是键进行排序。

以下是我对此的尝试,但我收到3个错误,我不知道如何解决它。我不允许使用LINQ。

List<string> words = new List<string>(); <--- Already populated

这是我的实现代码,我得到3个错误:

            SortedList<string, int> d = new SortedList<string, int>();
            bool InsideOfList = false;

foreach (string word in words)
{
    InsideOfList = false;

    foreach (KeyValuePair<string, int> keyvalPair in d)
    {

        if (keyvalPair.Key == word)
        {
            keyvalPair.Value += 1;
            InsideOfList = true;
        }

    }
    if (InsideOfList == false)
    {
        d.Add(word,1);
    }
}
//Now instead of sorting by key I want to sort by value instead

SortedList<int, string> tempSortList = new SortedList<int, string>();

foreach (KeyValuePair<string, int> keyvalPair in d)
{
//trying to swap the value of previous SortedList with the Key of the new SortedList
    tempSortList.Add(keyvalPair.Value, keyvalPair.Key);

}

for (int i = 0; i < 20; i++)
{
    Console.WriteLine("\t{0}:\t{1}", tempSortList.GetKey(i), tempSortList.GetByIndex(i));

}

以下是我的错误:

Property or indexer 'System.Collections.Generic.KeyValuePair<string,int>.Value' cannot be assigned to -- it is read only

'System.Collections.Generic.SortedList<int,string>' does not contain a definition for 'GetKey'

'System.Collections.Generic.SortedList<int,string>' does not contain a definition for 'GetByIndex'  

2 个答案:

答案 0 :(得分:0)

你在这里混淆了两件事。一个是SortedList(),另一个是SortedList()。

SortedList()中不存在GetKey和GetKeyList。您可以使用此代替GetKey

tempSortList.ElementAt(index); // This will return you a KeyValuePair.

对于第一个错误,您无法分配值keyvalPair.Value只有getter。因此,您无法通过+ = 1来设置其值。

这不太好。需要一些改进,但它会起作用。

for (int i = 0; i < d.Count; i++)
{
    if (d.ElementAt(i).Key == word)
    {
        d.Values[i] += 1;
    }
}

for (int i = 0; i < d.Count; i++)
{
    if (d.ElementAt(i).Key == word)
    {
        var val = d.ElementAt(i).Value + 1;
        d.RemoveAt(i);
        d.Add(word, val);
    }
}

答案 1 :(得分:-1)

请修改此行并检查其是否有效。应该。

Console.WriteLine("\t{0}:\t{1}", tempSortList.GetKey(i), tempSortList.GetByIndex(i));

var key = tempSortedList.Keys[i];
var value = tempSortedList.Values[i];
Console.WriteLine("\t{0}:\t{1}", key, value);