Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Лексическая статистика / 3 сообщений из 3, страница 1 из 1
28.11.2006, 17:48
    #34161868
Удирающий_от_Access
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Лексическая статистика
Есть текст:

Label1.Text = "Саша Маша каша Саша Саша каша";

Как получить о нем отчёт в таком виде:

Слова | Количество
----------------------------
каша | 2
Саша | 3
Маша | 1?

Мой вопрос связан с тем, что нет ясности как в конструкции for(){} "уменьшить "на лету" размер массива, если какое-то слово-элемент массива повторяется? Надо ж его удалять, чтобы не прокручивать снова.

Вот мой код:

private string CountStrings(string str)
{

StringCollection myCol = new StringCollection();

string count = "";
string[] searchString = str.Split(new char[] { ' ' });
myCol.AddRange(searchString);

for (int i = 0; i < myCol.Count; i++)
{
if (myCol.Length > 2)
{
count += myCol + ": " + new Regex(myCol).Matches(str).Count + "<br />";
}
}
return count;
}

Хотя Regex подсчитывает правильно, цикл прокручивает всЁ, т.к. он не менялся после создания.

Спасибо.
...
Рейтинг: 0 / 0
29.11.2006, 02:17
    #34162570
Dimon aka Manowar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Лексическая статистика
Hashtable вполне справится. Или, лучше, Dictionary<string, int>

Dictionary<string, int> words = new Dictionary<string, int>();
foreach(string word in str.Split(' '))
  if(words.ContainsKey(word))
    words[word]++;
  else
    words.Add(word, 1);


Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
...
Рейтинг: 0 / 0
29.11.2006, 08:52
    #34162743
Удирающий_от_Access
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Лексическая статистика
Спасибо, работает.

Только мешает, что надо в конце делать ещё один прогон цикла типа:

foreach (KeyValuePair<string, int> kv in words)
{
count += kv.Key + " - " + kv.Value + "<br />";

}

А хотелось бы избежать, и вычислить за раз.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Лексическая статистика / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]