我当前的代码循环遍历包含数组中已保存字符串的列表。目前,它会查找该数组中的所有字符串。我想改变它,以便它只在“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++;
}
}
}
答案 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;
}
}
}