繁体   English   中英

使用项目的值[不按键]在字典中删除项目

[英]Removing an item in Dictionary using the Value of the item [ not by key ]

我具有字典[INT,IBOOKS],其中IBOOKS是一个具有接口BOOKNAME作者作为属性。

我已经厌倦了使用keyvaluepair 按值删除字典

这是我的代码:

 public override void remove()
 {
     Dictionary<int, Ibooks > books = new Dictionary<int, Ibooks>();
     Console.WriteLine("Enter the value to be removed : ");

     string value = Console.ReadLine(); 

     //var item=books.First<kvp.Value == value >;

     foreach (var item in books.Where(kvp => kvp.Value == value).ToDictionary()) //error line
     {
         books.Remove(item);
     }
}

Ibook界面:

interface Ibooks
    {
        string bookname { get; set; }
        string author { get; set; }
    }

但我得到这个错误:

“运算符==不能应用于Dictionary.Ibooks和字符串的类型”

任何人都可以解决这个问题,否则还有其他更好的方法可以通过其值来查找元素吗?

例如 ,

我的输入是bookname =“ dbms”,它应该从字典中删除特定的书。

但是我无法与特定值“ bookname”进行比较。 由于该界面同时具有作者和书名作为属性。

这个说法是不正确的:

书籍中的var项。where(kvp => kvp.Value == value)

您正在将IBooks与导致构建错误的string进行比较。

请注意,该值的类型为string

字符串值= Console.ReadLine()

与字符串属性比较BookNameIBook

您必须执行以下操作:

Books.Where中的var项(kvp => kvp.Value.BookName ==值)

其他人已经解释了许多不同的方法来执行此操作,但是我想在这里继续说,我认为您从根本上滥用了Dictionary对象。 字典的大多数概念是按键添加和引用值。 您正在完全向后进行此操作,并且每个人的解决方案都是80个字符的LINQ查询是有原因的。 如果要使用int(大概是ISBN?)作为键存储对书的引用,请使用键删除它们。 如果希望用户能够根据书名删除书,请使用书名作为键。 您现在所拥有的太过复杂了,作为临时解决方案,找到办法将这种复杂性加倍的方法根本无法帮助您。

在您的代码中, kvp.Value指向一个Ibooks实例。 如果您要匹配用户输入的kvp.Value.booknamekvp.Value.bookname更改为kvp.Value.bookname 如果要匹配作者,则将其更改为kvp.Value.author

你实际上应该使用这样的东西

foreach (var item in books.Where(kvp => kvp.Value.bookname == value).ToDictionary())

这是因为您尝试比较接口和字符串(编译器告诉您)。

尝试这个

foreach (var item in books.Where(kvp => kvp.Value.bookname.equlas(value)).ToDictionary())
    books.Remove(item.Key);

终于解决了我的问题,

        Console.WriteLine("Enter te bookname");
        string searchvalue=Console.ReadLine ();

        foreach (var item in books.Where(kvp => kvp.Value.bookname == searchvalue ))
        {

            books.Remove(item.Key);

        } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM