【问题标题】:Making a search engine of sorts and I'm stuck制作各种搜索引擎,我被困住了
【发布时间】:2021-07-27 20:16:45
【问题描述】:

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

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

我被困在案例 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;
        }
    }
}

【问题讨论】:

  • for (int i = 0; i &lt; bloggInlägg.Length; i++) 您正在遍历错误的集合。您想在bloggen[i][0] 中查找标题,并在点击显示中与bloggen[i][1] 一起查看。
  • 另外:您需要准确地输入标题才能找到它。您可能需要考虑使用string.Substringstring.Contains

标签: c# for-loop search


【解决方案1】:

案例 2 中的循环存在缺陷。 我认为您想遍历所有项目,如果 Title 或 Body 包含该单词,则打印 Title。

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

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

【讨论】:

  • 老兄谢谢你,也感谢你的快速回答。你在这方面比我的技能水平略高,我们还没有使用 currentBloggen 和那个,但是如果你知道如何在不使用 current 的情况下做到这一点,那会很好,但我可能可以使用它而不会成为问题。仍然非常感谢我感谢你。
猜你喜欢
  • 1970-01-01
  • 2017-09-26
  • 2019-04-30
  • 2020-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
相关资源
最近更新 更多