c# - 搜索匹配项时是否可以使用列表作为模式?

标签 c# forms

我基本上将具有不同变量的犯罪分子添加到报告中,看起来像这样:

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.
    }

Layout of the program, ANMÄLAN is where you enter to register a crime, SÖK is where you search for reports and SÖKRESULTAT is where the matching reports will shop up

请原谅这篇长帖子,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/

相关文章:

c# - IsAssignableFrom 和 GetInterface 之间有什么区别?

c# - 从字符串中获取 XML 数据

c# - 我怎样才能排序但在底部放零?

javascript - 如何用方向键在 <span> 之间实现导航?

javascript - 使用 AJAX 提交所有表单数据

jQuery 不响应简单的 .click() 命令——出了什么问题?

c# - Windows Phone 8 的计时器

c# - 对于 Swashbuckle/Swagger,将 WebApi 方法的参数标记为过时/弃用

javascript - 禁用输入字段中的符号和非字母

php - 如何确定是否使用 PHP 选中了复选框?