Я пытаюсь удалить элементы из Dictionary<string, List<string>>
в C #, когда счетчик list<string>
меньше или равен 1. Я получил некоторый работающий код, но он не изящен, и у меня есть ощущение, что этоможно сделать элегантно в Linq.
Это код, который у меня сейчас есть
Dictionary<string,List<string>> FindAnagrams(List<string> dictionary)
{
Dictionary<string, List<string>> anagrams = new Dictionary<string, List<string>>();
foreach (string word in dictionary)
{
char[] charArray=word.ToCharArray();
Array.Sort(charArray);
string sorted=new string(charArray);
if (anagrams.ContainsKey(sorted))
anagrams[sorted].Add(word);
else
anagrams.Add(sorted, new List<string>() { word });
}
List<string> nonAnagrams = new List<string>();
foreach (var sorted in anagrams.Keys)
if (anagrams[sorted].Count == 1)
nonAnagrams.Add(sorted);
foreach(string word in nonAnagrams)
anagrams.Remove(word);
return anagrams;
}
Ниже показано, как далеко я ушел с помощью linq, но это не работает.
var realAna = from keys in anagrams.Keys
where anagrams[keys].Count >1
select anagrams.values;
Чтобы поставить проблемув контексте я пытаюсь найти анаграммы из словаря, я считаю слова имеющими анаграммы, если отсортированный ключ имеет более одного значения , связанного с ним.