C#如果“array [1]”中的字符串包含关键字

时间:2016-11-13 12:32:44

标签: c# arrays list foreach element

我当前的代码循环遍历包含数组中已保存字符串的列表。目前,它会查找该数组中的所有字符串。我想改变它,以便它只在“log [1]”

中经历(搜索,查找)字符串

抱歉,我不知道“log [1]”这个词。我是编程新手。继续阅读,我想你会理解。

这就是我想要的方式:

foreach (string[] item[1] in loggbok)

项目[1]是日志[1]。数字1非常重要,因为我只想在log [1]中搜索。

这是我目前用于在列表中保存整个数组的代码:

List<string[]> loggbok = new List<string[]> { };
string[] log = new string[3]; //date, title, post

DateTime date = DateTime.Now;

log[0] = "\n\tDate: " + date.ToLongDateString() + " Kl: " + date.ToShortTimeString();
Console.WriteLine(log[0]);

Console.Write("\tTitle: ");
log[1] = "\tTitle: " + Console.ReadLine();

Console.Write("\tPost: ");
log[2] = "\tPost: " + Console.ReadLine();

loggbok.Add(log);
log = new string[3];

我保存“log [1],log [2],log [3]”

以下代码我想创建一个搜索功能,它通过我的列表并识别log [1] aka titles中的所有字符串。如果字符串标题包含users关键字,则所有日志都应该加入,并且将打印日志。

截至目前。我通过搜索所有日志(1,2,3)解决了这个问题。这意味着我的程序正在搜索(标题,日期,帖子)中的字符串。这使得当我希望仅通过搜索标题来限制用户时,您可以搜索消息或“发布”。

所以我认为maby如果在我的foreach循环中我将“item”改为“item [1]”。这会使我的代码只查找“log [1]”。虽然因为写“item [1]”是无效的语法,但我没有那么远。

当前搜索功能:

string key;
Console.Write("\n\tSearch: ");
key = Console.ReadLine();

//Searching through all log[] in loggbok.
//I want to change this line to item[1]
foreach (string[] item in loggbok)
{
    //goes deeper and looks for all strings within log[].
    foreach (string s in item)
    {
        //if a string is found containing key word, this block will run.
        if (s.Contains(key))
        {
            foundItem = true;
            Console.WriteLine(String.Join("\r\n", item));

            index++;
        }  
    }
}

4 个答案:

答案 0 :(得分:0)

可能你可以这样做:

var result = loggbok.FirstOrDefault(x=> x.Any(s=> s.Contains(key));

Console.WriteLine(result?? "No record found");

答案 1 :(得分:0)

你甚至不需要循环,所以你需要做的是通过索引从loggbok中检索项目。

// assign loggbokx of index 1, to variable item.
string[] item = loggbok[1];
// item will then have the 2nd (index=1) logbook.
// Note that index starts from 0.
// If you want to have the first one, then it should be loggbox[0]
// to make it even simpler you can write 
//     var item = loggbok[1];

// and the rest is the same...

//goes deeper and looks for all strings within log[].
foreach (string s in item)
{
    //if a string is found containing key word, this block will run.
    if (s.Contains(key))
    {
        foundItem = true;
        Console.WriteLine(String.Join("\r\n", item));

        index++;
    }  
}

答案 2 :(得分:0)

让我们做对了!

为您的日志创建一个模型类:

class LogEntry
{
    public DateTime Date { get; set; }
    public string Title { get; set; }
    public string Post { get; set; }

    public override string ToString()
    {
        return "Date: " + Date.ToLongDateString() + " Kl: " + Date.ToShortTimeString()
            + "\tTitle: " + Title + "\tPost: " + Post;
    }
}

现在我们可以轻松使用这个模型。

让我们用更多记录填充列表:

List<LogEntry> loggbok = new List<LogEntry>();

for (int i = 0; i < 5; i++)
{
    LogEntry entry = new LogEntry();
    entry.Date = DateTime.Now;
    entry.Title = "title" + i;
    entry.Post = "post" + i;

    loggbok.Add(entry);
}

让我们打印出来:

foreach (var entry in loggbok)
    Console.WriteLine(entry);

由于ToString方法,重载输出看起来不错。

让我们找点事情:

string key = "title3";
var found = loggbok.Find(log => log.Title == key);
Console.WriteLine("Found:\n" + found);

我们可以使用List类和methods扩展方法的不同LINQ

如果您需要将数据保存到文件中,然后从那里读取它们,则可以使用json序列化。

例如,让我们使用JavaScriptSerializer(不要忘记添加对程序集的引用):

JavaScriptSerializer jss = new JavaScriptSerializer();

// Save
File.WriteAllText("test.txt", jss.Serialize(loggbok));

// Load
loggbok = jss.Deserialize<List<LogEntry>>(File.ReadAllText("test.txt"));

答案 3 :(得分:0)

这是解决方案,如果有人发现它是intressting。

foreach (string[] item in loggbok)
{
   foreach (string s in item)
   {
      //This was the magic line.
      string searchTitle = item[1].ToLower();

      if (searchTitle.Contains(titleKey.ToLower()))
      {
         Console.WriteLine("\n\tSearch hit #" + index);

         foundItem = true;

         Console.WriteLine(String.Join("\r\n", item));

         index++;

         break;
      }
   }
}