对于我的作业,我必须使用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'
答案 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);