我正在搜索stringarray中的字符串是否包含关键字。 如果字符串得到匹配,我希望在控制台上输出找到字符串的数组。
Sofar我设法输出了在stringarray中包含关键字的每个字符串。
我试图通过输出数组来解决这个问题,但后来我得到了这个消息" System.String []"
然而,这不是我的意图。我希望显示数组。我想知道,我怎么能这样做?
//抱歉英语不好。
以下是我的代码中的相关部分:
List<string[]> loggbok = new List<string[]> { };
string[] log = new string[3]; //date, title, post
DateTime date = DateTime.Now;
log[0] = "\n\tDate: " + date.ToLongDateString() + " Time: " + date.ToShortTimeString();
Console.Write("\tTitle: ");
log[1] = "\tTitle: " + Console.ReadLine();
Console.Write("\tPost: ");
log[2] = "\tPost: " + Console.ReadLine();
loggbok.Add(log);
log = new string[3];
Console.Write("\n\tSearch: ");
string keyWord;
keyWord = Console.ReadLine();
foreach (string[] item in loggbok)
{
foreach (var s in item)
{
if (s.Contains(keyWord))
{
Console.WriteLine(item);
}
}
}`enter code here`
答案 0 :(得分:2)
要显示整个数组,请尝试:
Console.WriteLine(String.Join("\r\n", item));
您可以像这样过滤数组:
Console.WriteLine(String.Join("\r\n", item.Where(item => item.Contains(keyWord)).ToArray());
或
string[] filtered = item.Where(s => s.Contains(keyWord)).ToArray();
Console.WriteLine(String.Join("\r\n", filtered));
如果要过滤整个loggbok (字符串数组列表),请使用SelectMany扩展名。
string[] filtered = loggbok.SelectMany(s => s.Contains(keyWord)).ToArray();
Console.WriteLine(String.Join("\r\n", filtered));
答案 1 :(得分:0)
如果我正确理解您的问题,您需要找到关键字的整个数组。
你做错了是你陈述Console.WriteLine(item)
,它只打印那个项目。
相反,如果在此数组中找到关键字,则创建一个返回true
的函数,如果没有找到,则返回false
。您的代码看起来像这样:
string keyWord;
keyWord = Console.ReadLine();
foreach (string[] item in loggbok)
{
if (checkItem(item)) {
for(int i = 0; i < item.Length; i++){
Console.WriteLine(item[i]);
}
}
}
public bool checkItem(string[] item, string keyWord) {
foreach(var s in item) {
if(s.Contains(keyWord))
return true;
}
return false;
}
这可能会对你有帮助。