【发布时间】:2021-03-15 03:25:49
【问题描述】:
我有一本字典,我想删除以某种方式包含给定单词的所有字符的所有键。例如,如果给定的单词已损坏,则应删除所有带有“corrupt”、“co2rrupt”、“ruptcor”等键的键/对值。
到目前为止,我有以下代码,但它似乎不起作用,我不知道为什么。
static Dictionary<string,double> Dict2(){
var dict = new Dictionary < string, double > ();
dict.Add("rupt cor0",1);
dict.Add("cor rupt1", 33);
dict.Add(" 4 cor ru pt4", 10752);
dict.Add("ted45", 6.878);
dict.Add("key2", 0.0033482143);
var word = "corrupt";
Console.WriteLine("This is the origina dictionary");
foreach (KeyValuePair<string, double> kvp in dict)
{
Console.WriteLine($"Key {kvp.Key}: Value={kvp.Value}");
}
foreach (KeyValuePair<string, double> entry in dict)
{
foreach (char character in word)
{
if (entry.Key.Contains(character))
{
dict.Remove(entry.Key);
}
}
}
这段代码应该删除前 3 对,但是当我在删除这些对后重新打印字典时,它只包含 key2:0.0033482143。
我想要一种不使用 LINQ 的方法。
【问题讨论】:
-
这个限制似乎有点武断。为什么没有 LINQ?这“只是”一堆让生活变得如此轻松的扩展方法。您可以自己重新实现所有这些...无论如何,我可能会从将“搜索词”作为字符列表之类的东西开始。然后遍历键的每个字符,检查它是否为
[a-zA-Z]并从列表中删除它的第一次出现。如果列表为空且键中仍有此类字符,则为“假”。仅当键末尾的列表为空时,它才是“真”。 (每个键后重置列表!) -
@Corak 可能是作业之类的,如果没有 LINQ,老师可能会对学生的思维方式有更多的了解。
-
这只是在没有 LINQ 和其他库的情况下实现这一点的练习。
-
" 它似乎不起作用,我不知道为什么。" 您的最后一个
foreach将检查字典中的Key是否包含来自word,如果是,它将删除整个条目。