c# - 制作各种搜索引擎,我被困住了
问题描述
我正在为我的学校使用 C# 编写代码。在编程方面我是个菜鸟,这是我的第一门编程课程。
我正在制作一个带有菜单选择的程序,其目标是能够将字符串标题和正文保存在两个向量中。然后您可以选择搜索标题,如果您的搜索与现有标题匹配,则标题和正文将显示在屏幕上。然后,您还可以在另一个菜单选择中查找所有已保存的标题和正文。
我被困在案例 2 上:我是否需要创建一个搜索引擎来在 bloggInlägg[0] 中找到一个标题,并且当我的搜索匹配 bloggInlägg0 和 bloggInlägg1 时应该出现在程序中。
一切都是用瑞典语写的,但是
- menuchoice 1:就是添加标题和正文,
- menuchoice 2 是搜索标题,然后显示标题和正文,
- menuchoice 3 是显示我所有已经制作的标题和正文
- menuchoice 4 是停止程序。
这是我的代码:
static void Main(string[] args)
{
bool kör = true;
List<string[]> bloggen = new List<string[]>();
while (kör)
{
Console.WriteLine("[1] Lägg till ett nytt inlägg i bloggen:");
Console.WriteLine("[2] Sök inlägg i bloggen: ");
Console.WriteLine("[3] Skriv ut alla blogginlägg: ");
Console.WriteLine("[4] Avsluta programmet: ");
string[] bloggInlägg = new string[2];
int menyVal;
int.TryParse(Console.ReadLine(), out menyVal);
switch (menyVal)
{
case 1:
Console.WriteLine("Välj titel till inlägget: ");
bloggInlägg[0] = Console.ReadLine();
Console.WriteLine("Nu kan du skriva ditt inlägg: ");
bloggInlägg[1] = Console.ReadLine();
bloggen.Add(bloggInlägg);
break;
case 2:
Console.WriteLine("Ange titel på inlägget du söker: ");
string searchWord = Console.ReadLine();
bool hittad = false;
for (int i = 0; i < bloggInlägg.Length; i++)
{
if (bloggInlägg[0] == searchWord) // om man ordet man söker efter matchar
{
hittad = true;
Console.WriteLine("Din sökning hittades: " + bloggInlägg[0]);
}
}
if (hittad == false) // om man ordet man söker efter inte matchar
{
Console.WriteLine("Din sökning hittades inte");
}
break;
case 3:
Console.WriteLine("Här är en lista på alla blogginlägg du sparat: ");
foreach (var item in bloggen)
{
Console.WriteLine(item[0] + " " + item[1]);
}
break;
case 4:
Console.WriteLine("Hejdå");
Console.ReadLine();
kör = false;
break;
}
}
}
解决方案
案例 2 中的循环有缺陷。我认为您想遍历所有项目,如果标题或正文包含该单词,则打印标题。
for (int i = 0; i < bloggen.Count; i++)
{
var currentBloggen = bloggen[i];
if (currentBloggen[0].Contains(searchWord) || currentBloggen[1].Contains(searchWord))
{
hittad = true;
Console.WriteLine("Din sökning hittades: " + currentBloggen[0]);
}
}
值得一看的 foreach 语句: https ://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/foreach-in
这为您提供了更简洁的代码:
foreach (var currentBloggen in bloggen)
{
if (currentBloggen[0].Contains(searchWord) || currentBloggen[1].Contains(searchWord))
{
hittad = true;
Console.WriteLine("Din sökning hittades: " + currentBloggen[0]);
}
}
然后看看如何创建一个类:https ://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/classes 。
您可以为 Title 和 Body 创建一个名为 Bloggen 的类,它有 2 个属性,并将该对象用于您的 bloggInlägg,
class Bloggen
{
public string Title { get; set; }
public string Body { get; set; }
}
这将使代码更容易阅读。
foreach (var currentBloggen in bloggen)
{
if (currentBloggen.Title.Contains(searchWord) || currentBloggen.Body.Contains(searchWord))
{
hittad = true;
Console.WriteLine("Din sökning hittades: " + currentBloggen.Title);
}
}
最后,在 Bloggen 类中创建一个名为“IsMatch”的方法
class Bloggen
{
public string Title { get; set; }
public string Body { get; set; }
public bool IsMatch(string word)
{
return Title.Contains(searchWord) || Body.Contains(searchWord);
}
}
循环变为:
foreach (var currentBloggen in bloggen)
{
if (currentBloggen.IsMatch(searchWord))
{
hittad = true;
Console.WriteLine("Din sökning hittades: " + currentBloggen.Title);
}
}
--- 实现该类需要其他更改,但我会留给您发现:)
推荐阅读
- json - 使用 fetch() 在 React 中无法识别本地 json 文件
- c# - 视觉工作室不会让我使用 Else
- jquery - Moment.js:为什么这个转换 Date -> Unix 给我 5:00:00 而不是 0:00:00?
- javascript - JQuery 有一些问题,看来我无法让它工作
- python - 在 Pandas 中使用 Multiindex 进行类似数组的操作?
- json - 如何修改 serde_json::Value::String 中的字符串?
- docker - 未找到 Docker SocketIO (Python)
- javascript - 为什么事件监听器会改变当前对象?
- angular - Cypress.io 不会为 Angular 应用程序保留 Auth0 登录
- android - 如何将文本传递到 React-Native 中的组件?(安卓)