C#从列表

时间:2016-07-01 14:44:27

标签: c# arrays list search printing

我是编码和C#的新手,我需要帮助我正在创建的程序。 这是一项学校作业,我无法让它发挥作用。

程序很简单,我有一本日志(List),我应该能够创建新日志(每个日志必须是一个单独的数组)并将其保存到List。我得到了那部分,但后来我应该能够搜索特定的日志(只需搜索日志的确切标题,00)我也应该能够打印列表中的每个日志(数组)马上出去(0,00,01,02.1,00,01,02等)

我尝试了几件事,但我无法让它工作,只搜索我的特定问题很难找到解决方案。

{
class Program
{
    static void Main(string[] args)
    {
        //List & Array\\
        List<string[]> loggBok = new List<string[]> { }; 
        string[] newEntry = new string[3]; 

        //Variabler\\ - Variabler för sökord och Tid&Datum
        string searchTerm = "";
        DateTime time = DateTime.Now; 

        Console.WriteLine("\tVälkommen till Charlies loggbok.");


        //Bool & While loop\\
        bool isRunning = true;
        while (isRunning)

            try 
            {
                { //Loop start

                    //Meny\\
                    Console.WriteLine("\n\t[1] Skriv ett nytt inlägg i loggboken");
                    Console.WriteLine("\t[2] Sök efter inlägg i loggboken");
                    Console.WriteLine("\t[3] Skriv ut alla loggar i loggboken");
                    Console.WriteLine("\t[4] Rensa bort all text");
                    Console.WriteLine("\t[5] Avsluta programmet");

                    Console.Write("\n\tVälj siffra: ");

                    //Switch\\
                    int menyVal = Convert.ToInt32(Console.ReadLine()); 
                    switch (menyVal) 


                    {
                        case 1: 
                            Console.WriteLine("\nDu har valt att skriva in ett nytt inlägg.");
                            //string[] newEntry = new string[3];


                            //Nytt inlägg\\
                            Console.Write("Skriv in titeln: ");
                            newEntry[0] = Console.ReadLine(); 

                            Console.Write("Skriv in meddelandet: ");
                            newEntry[1] = Console.ReadLine();

                            time = DateTime.Now; 
                            var entryTime = Convert.ToString(time); 
                            newEntry[2] = entryTime;

                            loggBok.Add(newEntry); 

                            Console.WriteLine("\nInlägget är sparat i loggboken");
                            break;

                        case 2:
                            Console.WriteLine("\nVänligen skriv in titelt på inlägget för att söka fram det.");
                            Console.Write("\nSök efter: ");

                            searchTerm = Console.ReadLine(); 

                            var foundItem = false; 

                            foreach (var item in loggBok) 
                            {
                                if (item.Contains(searchTerm)) 
                                {
                                    foundItem = true;
                                    Console.WriteLine(item);
                                }
                            }



                            if (!foundItem) 
                            {
                                Console.WriteLine("Kunde inte hitta inlägget du sökt efter.");
                            }

                            break;

                        case 3:
                            foreach (var item in loggBok) 
                            {
                                Console.WriteLine(item);
                            }
                            break;

                        case 4:
                            Console.Clear(); 
                            Console.WriteLine("\tFönstret är nu rensat.");
                            break;

                        case 5:
                            Console.WriteLine("\n\tHej då!");
                            System.Threading.Thread.Sleep(2000); 
                            isRunning = false; //bool är falskt och stänger då av programmet (avslutar loopen)
                            break;


                        default: 
                            Console.Clear(); //Rensar konsolfönstret
                            Console.WriteLine("Felaktig inmatning, skriv en siffra från menyn");
                            break;

                    }
                } //Loop slut
            }
            catch (Exception e) 
            {
                Console.WriteLine("\nNågot gick fel!");
                Console.WriteLine(e);
            }
    }
}
}

到目前为止这是整个程序,案例2和3是我遇到问题的,目前这些案例中的代码不起作用。

案例2是搜索功能。如果我添加多个数组,只能找到最后一个数组,但输出显示&#34; System.String []&#34;对于添加的每个数组(如果我添加2个数组,则显示消息2次)

和案例3是打印全部功能。它打印出所有数组,但输出也只是&#34; System.String []&#34;对于每个阵列。

谢谢。

3 个答案:

答案 0 :(得分:0)

您需要使用这样的嵌套循环。

__sync_add_and_fetch

为更多的景观做同样的事情。我是为foreach (var item in loggBok) { foreach (var s in item) Console.WriteLine(s); } break; 做的。希望它有所帮助。

答案 1 :(得分:0)

这里的问题是你没有深入钻研结构。想象一下就好;

-List
   -Array(of type string)
      -string
      -string
      -string

因此,在foreach循环中,您要求它返回实际的数组对象,这就是您获得此结果的原因。

只需更深一级,然后根据需要格式化输出;

foreach (var item in loggBok)
{
    Console.WriteLine(string.Format("{0},{1},{2}", item[0], item[1], item[2]);
}

答案 2 :(得分:0)

你可能会认为这完全成熟了一段代码

案例2:

            List<string[]> loggBok = new List<string[]>();
        string searchTerm = Console.ReadLine();

        bool foundItem = false;
        int index = 0;

        do
        {
            string[] log = loggBok[index];
            if(log[0] == searchTerm)
            {
                foundItem = true;
                Console.WriteLine("Found it.");
            }

        } while(foundItem == false && index > loggBok.Count);

查看do{}while();的使用情况,你必须至少循环一次,但直到你找到该项目或直到你整个集合为止。

for case3:

for (int i = 0; i < loggBok.Count; i++)
        {
            string firstEntry = loggBok[i][0];
            string secondEntry = loggBok[i][1];
            string thirdEntry = loggBok[i][2];

            Console.WriteLine(firstEntry + " , " + secondEntry + " , " + thirdEntry);
        }

这里我们使用for循环,因为我们确切地知道我们必须通过你的日志循环多少次。