【问题标题】:Filter array of string and get only matching ones with searched string过滤字符串数组并仅获取与搜索字符串匹配的字符串
【发布时间】:2015-07-15 15:58:27
【问题描述】:

我有一个 string 数组,我想从中返回一个过滤后的数组,该数组仅包含与搜索字符串匹配的那些字符串。

string[] myValues = {"School.Report1", "School.Report2", "School.Report3", "House.Report1", "House.Report2"};
string myFilter = "School";
string[] filteredValues = myValues.Filter(myFilter); // or something similar

filteredValues 必须仅包含:"School.Report1", "School.Report2", "School.Report3"

-- 编辑--

如果可能的话,我更喜欢非 LINQ 方法。否则我知道这个问题可以用这里提出的解决方案来回答:filter an array in C#

【问题讨论】:

  • filter an array in C#的可能重复
  • @Sayse 是的,但是建议的不使用 LINQ 的解决方案是一个 foreach 循环,里面有比较。我想知道在没有 LINQ 的情况下是否有更优雅、更简洁的方法。
  • 能否包含School1.Report1
  • @CheshireCat:你没有提到不能使用 LINQ,为什么?
  • 你应该展示你尝试过的东西,这只是我发现的第一个重复项,但周围有很多重复项。他们中的大多数都使用您描述的方法,所以我不确定这里的实际问题是什么

标签: c# arrays string


【解决方案1】:

如果你不能使用 LINQ,你仍然可以使用Array.FindAll:

string[] filteredValues = Array.FindAll(myValues, s => s.Contains(myFilter)); 

或者您可能只想保留第一个标记(以点分隔)为 School 的所有字符串:

string[] filteredValues = Array.FindAll(myValues, s => s.Split('.')[0] == myFilter);

【讨论】:

    【解决方案2】:

    一个可能的答案是创建一个 IComparer,它按匹配值对数组进行排序(如果它包含过滤器,则返回 1,否则返回 0),然后找到过滤器外的第一项,并创建另一个数组,其值高于前一个点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多