Начну с того, что я не совсем обернулся вокруг ООП.Добавление и подсчет каждого слова в строке в связанном списке
Мне нужна процедура, которая выполняет итерацию через каждое слово в строке, проверяет, находится ли она в моем связанном списке и добавляет ее как узел, если она не является или увеличивает счет существующего узла, если он находится в список.
Вот что у меня есть:
private void CountWords(string cleanString)
{
WordNode nextNode, prevNode;
WordNode addNode;
foreach (string stringWord in cleanString.Split(' '))
{
if (head == null)
{
// No items in list, add to the beginning
addNode = new WordNode(stringWord);
head = addNode;
}
else
{
if (String.Compare(stringWord, head.Word) < 0)
{
// If stringWord belongs at the beginning of the list, put it there
addNode = new WordNode(stringWord);
addNode.NextWord = head;
head = addNode;
}
else if (String.Compare(stringWord, head.Word) == 0)
{
// If stringWord is equal to head.Word, increase count
addNode.Count += 1;
}
else
{
prevNode = head;
nextNode = head.NextWord;
// If it doesn't belong at the beginning, cycle through the list until you find where it does belong
while ((nextNode != null) && (String.Compare(nextNode.Word, addNode.Word) < 0))
{
prevNode = nextNode;
nextNode = nextNode.NextWord;
}
if (nextNode == null)
{
prevNode.NextWord = addNode;
}
else
{
prevNode.NextWord = addNode;
addNode.NextWord = nextNode;
}
}
}
}
}
До этого я пытать AddNode = новый WordNode (stringWord); в начале каждой итерации через цикл «для каждого слова в строке», но это будет определять класс и сбросить счет до 1. Теперь, в настоящее время, я не могу увеличить счет, потому что addNode.Count + = 1; не определено. Я надеялся, что смогу проверить, был ли stringWord в связанном списке, и если да, добавьте stringWord.count к одному, но это вызывает ошибку.
Глядя на это сейчас, я думаю addNode.Count + = 1; принадлежит в цикле в то время как несколько строк ниже его ...
Вот мой WordNode класс:
class WordNode
{
// constants
// variables
private string data; // this is our only data, so also key
private int count;
private WordNode next; // this is reference to next Node
// constructors
public WordNode(string newValue)
{
Word = newValue;
count = 1;
NextWord = null;
}
// methods
public string Word
{
get
{
return data;
}
set
{
data = value;
}
}
public int Count
{
get
{
return count;
}
set
{
count = value;
}
}
public WordNode NextWord
{
get
{
return next;
}
set
{
next = value;
}
}
}
Спасибо! Это делает трюк, хотя они не в алфавитном порядке (но я не указал это в своем первоначальном посте). – Gerald
В мой linq-подход легко добавить метод сортировки. – Enigmativity