我基本上将具有不同变量的犯罪分子添加到报告中,看起来像这样:
reports.Add(new Report(tbxCriminalSuspicion.Text,
(new Criminal(Ordformatering(tbxName.Text), Ordformatering(tbxSex.Text), int.Parse(tbxAge.Text),
double.Parse(tbxHeight.Text), Ordformatering(tbxHairColor.Text)))));
然后我创建另一个字符串,我想用它来搜索罪犯。您在文本框中键入内容,然后将其放入列表中:
string allSearchWords = tbxSearchWords.text;
List<string> splitSearchWords = new List<string>();
allSearchWords = allSearchWords.Replace(" ", "");
splitSearchWords = allSearchWords.Split(',').ToList();
现在我有了一个单词列表,我可以通过以下方式搜索我的罪犯:
splitSearchWords.All((criminal).Contains);
但是,如果情况如下:
罪犯1:18岁,176厘米
罪犯2:34岁,180厘米
尽管只有一名罪犯年满 18 岁,但两名罪犯都会出现在列表框中。换句话说,是否可以使用列表作为模式来搜索精确匹配?可以附上一些代码。
List<Report> reports = new List<Report>();
List<string> splitSearchWords = new List<string>();
private void btnSearch_Click(object sender, EventArgs e)
{
lbxLista.Items.Clear();
if (string.IsNullOrWhiteSpace(tbxSearchWords.Text))
{
MessageBox.Show("Vänligen fyll i dina sökord innan du söker enligt \"Sökord, sökord, sökord, ...\"",
"Felinmatning", MessageBoxButtons.OK, MessageBoxIcon.Information);
//Just a check so that the searchbox isn't empty!!!!
}
else
{
string allSearchWords = tbxSearchWords.Text;
allSearshWords = allSearshWords.Replace(" ", "");
splitSearchWords = allSearchWords.Split(',').ToList();
for (int i = 0; i < reports.Count; i++)
{
if(ContainsSearchWord(reports[i].GetData(), splitSearchWords))
{
lbxLista.Items.Add(reports[i].ToString());
}
}
}
}
public static bool ContainsSearchWord(string stringToTest, List<string> searchedWords)
{
return searchedWords.All((stringToTest).Contains);
}
类(class)、报告和犯罪:
class Report
{
public string GetData()
{
return "" + criminal.criminalName + " " + criminal.criminalSex +
" " + criminal.criminalAge + " " +
criminal.criminalHeight + " " + criminal.criminalHairColor;
}
}
class Criminal
{
private string privatCriminalName;
private string privatCriminalSex;
private int privatCriminalAge;
private double privatCriminalHeight;
private string privatCriminalHairColor;
public Criminal(string mCriminalName, string mCriminalSex,
int mCriminalAge, double mCriminalHeight, string mCriminalHeightColor)
{
this.criminalName = mCriminalName;
this.criminalSex = mCriminalSex;
this.criminalAge = mCriminalAge;
this.criminalHeight = mCriminalHeight;
this.criminalHairColor = mCriminalHeightColor;
}
//Then I have properties to access these from outside the class but removed due to being messy and lengthy in post.
}
请原谅这篇长帖子,10 个小时后我就迷路了。
最佳答案
您可以使用数组,而不是使用字符串来测试模式。该数组将包含每个特征和犯罪作为单独的字符串值。这样,您仍然可以使用 Contains
,但它会单独测试字符串,而不是它们的子字符串。
public static bool ContainsSearchWord(string stringToTest, List<string> searchedWords) {
return searchedWords.All((stringToTest.Split(' ')).Contains);
}
您甚至不必为此创建变量,只需对已有的变量使用 Split()
即可。
关于c# - 搜索匹配项时是否可以使用列表作为模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72069385/