通用词典搜索功能
本文关键字:功能 搜索 通用词 | 更新日期: 2023-09-27 18:26:36
我正在创建一个Generic Dictionary,它将像一个库一样,能够添加、删除和搜索图书,除了搜索功能外,我还拥有这些功能。
搜索功能有两个字段:标题和ISBN,我可以搜索有ISBN的书,但不能搜索标题。
这是我的搜索代码:
private void Searchbtn_Click(object sender, EventArgs e)
{
string searchTerm = TitleBox.Text;
if (ISBNBox.Text.Length == 5)
{
foreach (KeyValuePair<string, Book> b in books)
{
if (b.Value.ISBN == int.Parse(ISBNBox.Text))
{
ISBNBox.Text = b.Value.ISBN.ToString();
TitleBox.Text = b.Value.Title.ToString();
chkLoan.Enabled = true;
}
}
}
else if (TitleBox.Text != "")
{
foreach (KeyValuePair<string, Book> b in books)
{
if (b.Value.Title.ToLower().Contains(searchTerm))
{
ISBNBox.Text = b.Value.ISBN.ToString();
TitleBox.Text = b.Value.Title;
chkLoan.Enabled = true;
}
}
}
else
{
MessageBox.Show("Searching Requires the ISBN or Title field to be filled");
}
}
我怎样才能让我的搜索功能也允许我搜索标题?
我该如何搜索Partial字符串?例如,我可以搜索"Cool",而不是"Cool Story Bro",它可以在其中找到所有带有"酷"的实例。
编辑:利用我在这里学到的知识,我已经完全可以使用搜索功能:)
试试这个
foreach (KeyValuePair<string, Book> b in books)
{
if (b.Value.Title.IndexOf(searchTerm,StringComparison.InvariantCultureIgnoreCase) >=0)
{
ISBNBox.Text = b.Value.ISBN.ToString();
TitleBox.Text = b.Value.Title;
chkLoan.Enabled = true;
}
}
IndexOf方法给出给定字符串的第一个索引(如果找到),它允许我们搜索CaseInsensitive
。
您所拥有的应该可以工作。正如Dark Falcon建议的尝试:
string searchTerm = TitleBox.Text.ToLower();
我可能在你的问题中遗漏了一个细节,但一般来说,如果你想对键和值进行关键字搜索,你可以这样做:
Dictionary<string, Book> d = new Dictionary<string, Book>();
//Fill dictionary
string searchterm = //get searchterm
List<Book> results = new List<Book>();
results.AddRange(from i in d where i.Key.Contains(searchterm) select i.Value);
results.AddRange(from i in d where i.Value.Title.Contains(searchterm) select i.Value);
//Print Results