【问题标题】:How to find the element in an string array if its content contains my search term如果其内容包含我的搜索词,如何在字符串数组中查找元素
【发布时间】:2020-11-01 16:58:48
【问题描述】:

我的字符串数组是这样的:

string[] headers = {"Row Nr", "StartDate", "StartTime", "Q_1", "Q_96"};

如何在数组中找到包含我的搜索词“日期”的元素?

我知道如何找到它的值等于我的搜索词的元素,如下所示:

var match = headers.FirstOrDefault(stringToCheck => stringToCheck.Contains("StartDate"));

但是,当我的带有 IgnoreCase 的元素的一部分包含搜索项时,我没有找到任何解决方案来找到我的元素,即在这种情况下搜索“日期”而不是“开始日期”。

【问题讨论】:

    标签: c# arrays search contains


    【解决方案1】:

    这个重载Contains(String value, StringComparison comparisonType)不包含在netstandard2.0中。

    这是另一种选择:

            string[] headers = { "Row Nr", "StartDate", "StartTime", "Q_1", "Q_96" };
            var match = headers.FirstOrDefault(c => !string.IsNullOrEmpty(c) && c.IndexOf("date", StringComparison.OrdinalIgnoreCase) >= 0);
    

    【讨论】:

      【解决方案2】:

      只需为Contains 方法使用另一个重载:

      var match = headers.FirstOrDefault(c => c.Contains("date", StringComparison.OrdinalIgnoreCase));
      

      【讨论】:

      • 谢谢@Dimitry。但在这种情况下,正如您所建议的,我收到如下错误:方法“包含”没有重载需要两个参数!
      【解决方案3】:

      我找到了解决这个问题的方法如下:

      private void setDateColumnTitle ()
      {
      string stringToCheck = "date";
      int stringToCheckIndex = -1;
      string elementInArray = "Not Defined or Not Found";
      if (Array.Exists<string> (headers, (Predicate<string>) delegate (string s)
          {
              stringToCheckIndex = s.IndexOf (stringToCheck, StringComparison.OrdinalIgnoreCase);
              elementInArray = s;
              return stringToCheckIndex > -1;
              }))
          {
          dateColTitle.Text = elementInArray; //a textbox to show the output
          }
      }
      

      但是,我发现@Lev 的答案更简单、更短,给出的结果如下:

          private void setDateColumnTitle ()
      {
      
      dateColTitle.Text = "Not Defined or Not Found";
      
      var match = headers.FirstOrDefault(c => c.IndexOf("date", StringComparison.OrdinalIgnoreCase) > -1);
      
      if (match!=null)                
          dateColTitle.Text = match;               
      }
      

      所以,它应该被选为这个问题的答案。

      【讨论】:

      • 谢谢,请注意,我用 2 个修复更新了我的原始答案:添加了对 IsNullOrEmpty 的检查,并更改条件以检查索引是否大于或等于 0,以防字符串以“日期”开头
      • 感谢您改进代码。顺便说一句,我认为这部分 (!string.IsNullOrEmpty(c) ) 是不需要的。无论数组元素是不匹配的字符串还是 null,该方法都返回 null。仅当元素字符串中存在搜索词时,匹配变量才会将其标识为字符串!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-07
      • 2013-09-09
      • 1970-01-01
      • 2018-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多