【问题标题】:How to retrieve data from array using split function in c#如何在c#中使用split函数从数组中检索数据
【发布时间】:2019-03-22 15:14:51
【问题描述】:

我有一个包含一些服务名称的列表以及两个文本框。第一个文本框是您输入您希望服务包含的字词的地方,另一个文本框是您输入要排除的字词的地方。因此,如果我输入 tbOne = SQL 并且对于 tbTwo = Browser,Server。我应该只获得 SQL 管理。相反,它遍历列表中的每个项目并显示它。我该如何防止这种情况。请帮忙。

protected void Button1_Click(object sender, EventArgs e)
{
    string tbOne = TextBox1.Text;
    string[] tbOneArray = tbOne.Split(',');

    string tbTwo = TextBox2.Text;
    string[] tbTwoArray = tbTwo.Split(',');


    var service1 = "SQL Server Agent";
    var service2 = "SQL Browser";
    var service3 = "SQL Administration";

    List<string> listOfServices = new List<string>();

    listOfServices.Add(service1);
    listOfServices.Add(service2);
    listOfServices.Add(service3);

    foreach (var service in listOfServices)
    {
        foreach (var includedItem in tbOneArray)
        {
            foreach (var excludedItem in tbTwoArray)
            {
                if (service.Contains(includedItem) && !service.Contains(excludedItem))
                {
                    Response.Write(service);
                }
            }
        }
    }

}

【问题讨论】:

  • 1.迭代:“SQL 浏览器”包括“SQL”和“浏览器”-> 没有写入,2. 迭代:“SQL 浏览器”包括“SQL”而不是“服务器”=> 写入...看到问题了吗?

标签: c# arrays list


【解决方案1】:

试试这个

foreach (var service in listOfServices.Where(x=> tbOneArray.Any(a=> x.Contains(a)) &&
!tbTwoArray.Any(a=> x.Contains(a))))
{
  Response.Write(service);
}

【讨论】:

  • 从数组转换为列表(ToList):)
  • 是的,我知道,但没有理由这样做。 Any 也适用于阵列。它是一种扩展方法,适用于实现 IEnumerable&lt;T&gt; 的任何类型。
【解决方案2】:

您可以将 LINQ Contains 扩展方法与 StringComparer.OrdinalIgnoreCase 一起使用,以使搜索不区分大小写。

var filteredServices = listOfServices
    .Where(svc =>
        svc.Split().Any(w => tbOneArray.Contains(w, StringComparer.OrdinalIgnoreCase)) &&
        !svc.Split().Any(w => tbTwoArray.Contains(w, StringComparer.OrdinalIgnoreCase)));
foreach (string service in filteredServices) {
    Response.Write(service);
}

为了只搜索整个单词,我将服务名称拆分为单个单词。

【讨论】:

    【解决方案3】:

    试试:

    if (service.Contains(includedItem) && !(service.Contains(excludedItem)))
      {
               Response.Write(service);
      }
    

    【讨论】:

    • 除了多余的不必要的括号外,我很难看出这与 OP 的代码之间的区别。
    猜你喜欢
    • 2014-07-14
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 2021-10-12
    • 2016-01-29
    • 1970-01-01
    相关资源
    最近更新 更多