【问题标题】:Need to check a key in a dictionary for the letters of a string需要检查字典中的键以查找字符串的字母
【发布时间】:2017-03-15 09:56:02
【问题描述】:

所以我有一本字典,需要检查每个键条目以查看它是否包含字符串中的一系列字母(我们称之为 LETTERS)。如果密钥有任何 LETTERS 没有的字母,或者它有比 LETTERS 更多的字母,则必须删除它。(事先不知道字母) 这是涉及的代码

Dictionary<string, int> wordHolder = new Dictionary<string, int>();
string LETTERS = Console.ReadLine();

for (int i = 0; i < LETTERS.Count(); i++)
{
    for (int j = 0; j < wordHolder.Count; j++)
    {

    }
}

【问题讨论】:

  • 你的问题不是很清楚。字母的顺序是否相关?你可以举一个真实的例子,这样我们就可以看到你想要达到的目标
  • 您能否举例说明 wordholder 和 LETTERS 将包含哪些内容。
  • 我猜您想检查您的收藏中是否存在密钥?
  • @Wheels73 wordholder 键的示例是 could 和 LETTERS hicquwh

标签: c# string dictionary


【解决方案1】:

如果你还需要答案,我想这次我有它了

下面有 5 个键...其中 3 个不能从“LETTERS”的内容中创建。

 Dictionary<string, int> wordHolder = new Dictionary<string, int>();
            wordHolder.Add("CEFBA",1);
            wordHolder.Add("ZDFEEG",2);
            wordHolder.Add("TYHRFG", 3);
            wordHolder.Add("FFFFBBDD", 4);
            wordHolder.Add("PCDATTY", 5);

            var keysToRemove = new List<string>();

            string myLetters = "ABCDEF";

            var myLettersArray = myLetters.ToCharArray();

            foreach (var keyToCheck in wordHolder)
            {
                var keyCannotBeCreatedFromLetters = false;
                var keyArray = keyToCheck.Key.ToCharArray();

                foreach (var letterExists in 
                            from keyLetterToCheck in keyArray 
                                where !keyCannotBeCreatedFromLetters 
                                    select myLettersArray.Any(a => a == keyLetterToCheck) 
                                        into letterExists 
                                            where !letterExists select letterExists)
                {
                    keysToRemove.Add(keyToCheck.Key);
                    keyCannotBeCreatedFromLetters = true;
                }
            }

            foreach (var key in keysToRemove)
            {
                wordHolder.Remove(key);
            }

它正确地将第二个、第三个和第五个键标识为不可创建。

以下是相同的逻辑,但与 foreach 循环相同。我发现这通常很有用,因此您可以查看内部发生的情况。

foreach (var keyToCheck in wordHolder)
            {
                var keyCannotBeCreatedFromLetters = false;
                var keyArray = keyToCheck.Key.ToCharArray();

                foreach (var keyLetterToCheck in keyArray)
                {
                    if (keyCannotBeCreatedFromLetters)
                        continue;

                    var letterExists = myLettersArray.Any(a => a == keyLetterToCheck);

                    if (letterExists) continue;

                    keysToRemove.Add(keyToCheck.Key);
                    keyCannotBeCreatedFromLetters = true;
                }
            }

【讨论】:

  • 谢谢你已经做到了!非常感谢您的帮助
【解决方案2】:

假设您要返回任何 KeyValuePair,其中 Key 包含 LETTERS 中的所有字母。

看起来像这样:

 // Assuming 
 // Dictionary<string, int> wordHolder = new Dictionary<string, int>();  // Something
 // string LETTERS = ""; // Something

 List<char> listLettersToHave = LETTERS.ToList();
 Dictionary<string, int> researchResult = new Dictionary<string, int>();
 foreach (KeyValuePair<string, int> pair in wordHolder)
 {
     List<char> listLettersYouHave = pair.Key.ToList();
     bool ok = true;

     // If not the same count go to next KeyValuePair
     if (listLettersToHave.Count != listLettersYouHave.Count)
         continue;

     foreach (char toCheck in listLettersToHave)
     {
         // Search first occurence
         if (!listLettersYouHave.Contains(toCheck))
         {
             ok = false;
             break;
         }

         // Remove first occurence
         listLettersYouHave.Remove(toCheck);
     }

     if (ok)
         // If all letters contained then Add to result
         researchResult.Add(pair.Key, pair.Value);
 }

 // if it's a function
 // return researchResult;

这是一个例子,你可以改进它,但想法就在这里。

编辑: 如果字典有键:abccbdadca bac 的输入 结果键是:abc

解决方案区分大小写,但.ToUpper() 将解决问题。

使用前面的示例,如果您希望 cbda 匹配,您可以取消对 Count 的检查。

【讨论】:

  • 抱歉,我无法理解我将如何使用它?我尝试将其添加到代码中,但什么也没发生?
  • 是因为你什么都没给你的字典吗?将某事与没有进行比较,结果将永远是没有:)
  • 对不起?我不明白,我想比较字典 wordHolder
猜你喜欢
  • 1970-01-01
  • 2011-08-16
  • 2020-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多