列表中的字符串[]导致问题

本文关键字:问题 字符串 列表 | 更新日期: 2023-09-27 17:55:04

我正在创建一个由列表内的数组组成的日志,数组是每个新条目,列表是日志。到目前为止,我是这样解决的:

using System;
using System.Collections.Generic; 
using System.Linq;                
namespace Journal
{
    class Program
    {
        static void Main(string[] args)
        {
            int menuChoice = 0;
            List<string[]> journal = new List<string[]>();
            while (menuChoice != 4)
            {
                Console.WriteLine("'n't't===Journal===");
                Console.WriteLine("'t[1] New entry in the journal");
                Console.WriteLine("'t[2] Search entry in the journal");
                Console.WriteLine("'t[3] Show contents of the journal");
                Console.WriteLine("'t[4] Exit");
                Console.Write("'tChoose: ");
                int.TryParse(Console.ReadLine(), out menuChoice);
                {
                    switch (menuChoice)
                    {
                        case 1:
                            {
                                string[] entry = new string[3];
                                DateTime time = DateTime.Now;
                                entry[0] = Convert.ToString(time);
                                Console.Write("'n'tWrite your title: ");
                                entry[1] = Console.ReadLine();
                                Console.Write("'n'tWrite your new entry: ");
                                entry[2] = Console.ReadLine();
                                journal.Add(entry);
                            }
                            break;
                        case 2:
                            Console.Write("'n'tSearch entry in the journal: ");
                            string searchTerm = Console.ReadLine();
                            for (int i = 0; i < journal.Count; i++)
                                if (journal[i].Contains(searchTerm))
                                {
                                    Console.WriteLine(journal[i]);
                                }
                                else
                                {
                                    Console.WriteLine("'n'tYour search was not found.");
                                }
                            break;
                        case 3:
                            Console.WriteLine("'n'tJournal:");
                            foreach (string[] item in journal)
                                Console.WriteLine("'n't" + item);
                            break;
                        case 4:
                            break;
                    }
                }
            }
        }
    }
}

我费了很大的劲才使它工作起来,可它还是不行。我要做的是用掉数组中的三个索引空间分别是时间,标题和文本然后把这三个组合到列表中这样它们就成了列表中的一个元素所以当我搜索标题时,它们会作为一个组出现。

我试图在声明日志时使用正常的字符串列表,但随后我无法将数组添加到其中,而无需指定要插入的索引。当我将列表的类型更改为字符串[]时,foreach循环停止工作,因为它们不能将字符串[]转换为字符串,所以然后我将foreach循环中的字符串更改为字符串[],现在当我试图写出所有内容或搜索时,我得到的都是"System.String[]"。

这就是我现在所处的位置,所以如果有人能告诉我我做错了什么,或者告诉我如何解决这个问题,我将不胜感激。

列表中的字符串[]导致问题

使用linq,您可以从子列表列表中生成一个列表:

foreach(var item in journal.SelectMany(x => x))
{
   // item is string
}

你当然需要加上using System.Linq;

journal是一个字符串数组列表。journal[i]是一个字符串数组。要输出字符串数组中的值,需要循环遍历该数组。

if (journal[i].Contains(searchTerm))
{
     for (int j = 0; j < journal[i].Count; j++)
         Console.WriteLine(journal[i][j]);
}

或作为foreach

foreach(string item in journal[i])
    Console.WriteLine(item);

解决此问题的最简单方法是创建具有Title, DateBody属性的JournalEntry类。在该类中,您可以重写ToString以生成格式化的输出。

在不创建类的情况下,解决此问题的最简单方法是明智地应用少量LINQ。您还可以使用String.Join将字符串数组组合为Console.WriteLine的单个字符串。

搜索标题包含搜索词的第一个条目:

var selected = journal.FirstOrDefault(item => item[1].Contains(searchTerm));
if (selected != null)
{
    // selected is the first string[] with a title containing the search term.
    Console.WriteLine(String.Join("'r'n", result));
}

搜索标题包含搜索词的所有条目:

var selected = journal.Where(item => item[1].Contains(searchTerm));
foreach (var result in selected)
{
   // result is the string[] journal entry
   Console.WriteLine(String.Join("'r'n", result));
}