首页 > 解决方案 > 制作各种搜索引擎,我被困住了

问题描述

我正在为我的学校使用 C# 编写代码。在编程方面我是个菜鸟,这是我的第一门编程课程。

我正在制作一个带有菜单选择的程序,其目标是能够将字符串标题和正文保存在两个向量中。然后您可以选择搜索标题,如果您的搜索与现有标题匹配,则标题和正文将显示在屏幕上。然后,您还可以在另一个菜单选择中查找所有已保存的标题和正文。

我被困在案例 2 上:我是否需要创建一个搜索引擎来在 bloggInlägg[0] 中找到一个标题,并且当我的搜索匹配 bloggInlägg0 和 bloggInlägg1 时应该出现在程序中。

一切都是用瑞典语写的,但是

这是我的代码:

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;
        }
    }
}

标签: c#for-loopsearch

解决方案


案例 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);
    }
}

--- 实现该类需要其他更改,但我会留给您发现:)


推荐阅读