使用文本文件 C# 进行线性搜索
Linear Search Using Text File C#
所以我有一个文本文件,我想在其中搜索一个数字,如果找到,则输出一个消息编号,如果没有,则找不到。
目前我已经将文本文件读入一个字符串并询问用户他们想要搜索什么号码。我坚持的部分是线性搜索字符串的代码。我想查找一个字符串,因为我将使用的其他文件可能包含单词。
到目前为止的代码:
public static void search() // Search for values
{
Console.WriteLine("Enter 1 to search through days");
int operation = Convert.ToInt32(Console.ReadLine());
if (operation == 1)
{
String[] myArray = File.ReadAllLines("Data1/Day_1.txt");
Console.WriteLine("Enter number to search");
String myString = Console.ReadLine();
}
}
我看过一些线性搜索代码,但不确定如何将其正确应用到我的示例中。我了解它是如何工作的,但问题在于以正确的顺序获取代码。不太擅长用 C# 编码。任何帮助将非常感激。谢谢
通用线性搜索代码:
static int Search(string[] list, string elementSought)
{
bool found = false;
int max = list.Length - 1;
int currentElement = 0;
do
{
if (list[currentElement] == elementSought)
{
found = true;
}
else
{
currentElement = currentElement + 1;
}
} while (!(found == true || currentElement > max));
if (found == true)
{
return currentElement;
}
else
{
return -1;
}
}
更新:
public static void search() // Search for values
{
Console.WriteLine("1=Day 2=Depth");
int operation = Convert.ToInt32(Console.ReadLine());
if (operation == 1)
{
String[] myArray = File.ReadAllLines("Data1/Day_1.txt");
}
else if (operation == 2)
{
String[] myArray = File.ReadAllLines("Data1/Months_1.txt");
}
Console.WriteLine("Enter number to search");
String myString = Console.ReadLine();
int i = 0;
int j = 0;
var regex = new Regex(myString);
foreach (string array in myArray)
{
if (regex.IsMatch(array))
{
i++;
}
else if (regex.IsMatch(array))
{
j++;
}
}
if (i > 0)
{
Console.WriteLine("Found match! - {1} Appeared {0} time(s)",i,myString);
}
else if(j == 0)
{
Console.WriteLine("No Match for {0} in Data", myString);
}
Console.ReadLine();
}
如何更改它以便在我选择第二个文件时它选择那个文件作为我的数组?
您使手头的任务过于复杂,只需使用 for 循环进行线性搜索或使用 Linq
:
static int Search(string[] list, string elementSought)
{
return list.ToList().FindIndex(s => s == elementSought);
}
您需要遍历字符串数组以搜索匹配项。使用正则表达式检查匹配项。
Console.WriteLine("Enter number to search");
String myString = Console.ReadLine();
var regex = new Regex(myString);
foreach (string array in myArray)
if (regex.IsMatch(array))
Console.WriteLine("Found match!");
您可以使用 Array.IndexOf。如果在数组中找不到该项目,它将 return -1,否则为它第一次出现的索引。
示例(控制台应用程序)
static void Main(string[] args)
{
string[] list = {"xxx", "yyy", "aaa", "bbb"};
var found = Search(list, "gggg");
}
static bool Search(string[] list, string elementSought)
{
var index = Array.IndexOf(list, elementSought);
var found = index != -1;
return found;
}
所以我有一个文本文件,我想在其中搜索一个数字,如果找到,则输出一个消息编号,如果没有,则找不到。
目前我已经将文本文件读入一个字符串并询问用户他们想要搜索什么号码。我坚持的部分是线性搜索字符串的代码。我想查找一个字符串,因为我将使用的其他文件可能包含单词。
到目前为止的代码:
public static void search() // Search for values
{
Console.WriteLine("Enter 1 to search through days");
int operation = Convert.ToInt32(Console.ReadLine());
if (operation == 1)
{
String[] myArray = File.ReadAllLines("Data1/Day_1.txt");
Console.WriteLine("Enter number to search");
String myString = Console.ReadLine();
}
}
我看过一些线性搜索代码,但不确定如何将其正确应用到我的示例中。我了解它是如何工作的,但问题在于以正确的顺序获取代码。不太擅长用 C# 编码。任何帮助将非常感激。谢谢
通用线性搜索代码:
static int Search(string[] list, string elementSought)
{
bool found = false;
int max = list.Length - 1;
int currentElement = 0;
do
{
if (list[currentElement] == elementSought)
{
found = true;
}
else
{
currentElement = currentElement + 1;
}
} while (!(found == true || currentElement > max));
if (found == true)
{
return currentElement;
}
else
{
return -1;
}
}
更新:
public static void search() // Search for values
{
Console.WriteLine("1=Day 2=Depth");
int operation = Convert.ToInt32(Console.ReadLine());
if (operation == 1)
{
String[] myArray = File.ReadAllLines("Data1/Day_1.txt");
}
else if (operation == 2)
{
String[] myArray = File.ReadAllLines("Data1/Months_1.txt");
}
Console.WriteLine("Enter number to search");
String myString = Console.ReadLine();
int i = 0;
int j = 0;
var regex = new Regex(myString);
foreach (string array in myArray)
{
if (regex.IsMatch(array))
{
i++;
}
else if (regex.IsMatch(array))
{
j++;
}
}
if (i > 0)
{
Console.WriteLine("Found match! - {1} Appeared {0} time(s)",i,myString);
}
else if(j == 0)
{
Console.WriteLine("No Match for {0} in Data", myString);
}
Console.ReadLine();
}
如何更改它以便在我选择第二个文件时它选择那个文件作为我的数组?
您使手头的任务过于复杂,只需使用 for 循环进行线性搜索或使用 Linq
:
static int Search(string[] list, string elementSought)
{
return list.ToList().FindIndex(s => s == elementSought);
}
您需要遍历字符串数组以搜索匹配项。使用正则表达式检查匹配项。
Console.WriteLine("Enter number to search");
String myString = Console.ReadLine();
var regex = new Regex(myString);
foreach (string array in myArray)
if (regex.IsMatch(array))
Console.WriteLine("Found match!");
您可以使用 Array.IndexOf。如果在数组中找不到该项目,它将 return -1,否则为它第一次出现的索引。
示例(控制台应用程序)
static void Main(string[] args)
{
string[] list = {"xxx", "yyy", "aaa", "bbb"};
var found = Search(list, "gggg");
}
static bool Search(string[] list, string elementSought)
{
var index = Array.IndexOf(list, elementSought);
var found = index != -1;
return found;
}