【发布时间】:2015-12-19 07:52:22
【问题描述】:
我有一个带有几个按钮(添加书籍、删除书籍、搜索等)的图书馆 GUI,它使用字典。 Book 构造函数有 2 个参数,ISBN 和标题。我有 2 个文本框,在添加之前询问用户 ISBN 和标题。我正在使用library[ISBNtext.Text] = new Book(ISBNtext.Text, TITLEtext.Text); 创建新书并将它们添加到字典中。我需要搜索按钮来通过 ISBN 或使用子字符串的标题搜索字典中的书籍(搜索“猫”将返回“如何照顾你的猫”)。
我的代码如下:
private void searchButton_Click(object sender, EventArgs e)
{
libraryList.Items.Clear();
foreach (KeyValuePair<string, Book> book in library)
{
if (book.Key.Contains(ISBNtext.Text) || book.Value.Title.Contains(TITLEtext.Text))
{
libraryList.Items.Add(String.Format("{0} = {1}", book.Key, book.Value.Title));
}
}
ISBNtext.Clear();
TITLEtext.Clear();
}
如果我添加一些简单的书(ISBN:1 - TITLE:1,ISBN:2 - TITLE:2,ISBN:3 - TITLE:3 等)并搜索 1,它只会显示每本书已添加,而不仅仅是我搜索的。
我还应该提到,这是给学校的,所以我不确定我可以使用任何图书馆或任何东西。
【问题讨论】:
-
ISBN 也可以部分匹配吗?字典的目的是(完整)键提供对象的快速查找。您根本没有使用它,而是对项目进行了蛮力搜索。您还不如使用列表。
-
在我根据 Akshey 的回答对其进行更改后,我认为它也会返回部分 ISBN 匹配项。这也是明确提到使用字典的工作表的一部分。
-
对于 ISBN,最好使用 == 运算符而不是 contains()。
-
我同意,使用单独的 if 语句并将 ISBN 检查更改为 == 而不是 contains() 并且一切都按预期工作。
标签: c# dictionary