#c# #list #dictionary #generics #collections
#c# #Список #словарь #общие #Коллекции
Вопрос:
У меня есть список строк. Вот так,
public List<string> filterWords = new List<string>()
{
"an" ,
"be",
" ",
"in",
"the",
"of"
..
...
.
.
....
};
У меня есть коллекция словарей в формате Dictionary<string, int>, например,
{{of, 2}},
{{an, 4}},
{{in, 7}},
{{the, 8}},
{{literate, 3}},
{{culture, 5}},
{{be, 5}},
...
and so and so
Цель состоит в том, чтобы проверить / выяснить и удалить из приведенных выше словарных записей, которые содержат ключи из предыдущего списка. т.е. an , be и т. Д.
Базовый код, который я собрал до сих пор, это —
public Dictionary<string, int> UniqueWordsDictionary(Dictionary<string, int> inputDict)
{
try
{
FilterWords flObj = new FilterWords();
var dictionary = new Dictionary<string, int>();
int idx = 0;
var wordsToRemove = flObj.filterWords
.Select(record => record.Substring(0, record.IndexOf(',')));
foreach(string wrd in wordsToRemove)
{
inputDict.Remove(wrd);
}
dictionary = inputDict;
return dictionary;
}
catch(Exception exp)
{
throw exp.GetBaseException();
}
}
Логика, вероятно, неправильная. Исключение, которое я получаю
Элемент с тем же ключом уже добавлен.
Трассировка стека —
at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value) at ....
использовался idx=0, потому что мне просто нужно значение по умолчанию 0 в значениях словаря. Логика казалась нормальной. Какое очень четкое и точное решение для этого. Любое критическое лямбда-выражение, которое может выполнить необходимое? Что не так с foreach в ‘wordsToRemove’ ?
Обратите внимание на мой опубликованный блок кода. Есть закомментированная строка dictionary=wordsToRemove .Выберите ………….Я попытался альтернативно прокомментировать это, и цикл foreach dictionary.Add. Error одинаков в обоих случаях.
** внимательно прочитайте комментарии, добавленные к блоку кода Thx.
Ответ №1:
Если вы хотите удалить, давайте Remove
:
List<string> filterWords = ...
// I have a dictionary collection in format of Dictionary<string, int>, Like so
Dictionary<string, int> dictionary = ...
...
// then we Remove each word in wordsToRemove from dictionary
foreach (string word in filterWords)
dictionary.Remove(word);
Комментарии:
1. привет @DimitryBychenko — небольшое изменение. в исходном коде, который я опубликовал, была ошибка. Пожалуйста, проверьте список <string> фильтрующих слов сейчас. содержит только слова, без 0, которые я опубликовал изначально.
2. ошибка теперь равна -> Длина не может быть меньше нуля. Имя параметра: длина. Pl обратитесь к изменению в блоке кода List<string> filterwords.