直接查找子字符串是不是是列表/数组的一部分

Posted

技术标签:

【中文标题】直接查找子字符串是不是是列表/数组的一部分【英文标题】:Find if a Substring is Part of List/Array Directly直接查找子字符串是否是列表/数组的一部分 【发布时间】:2016-09-05 05:14:09 【问题描述】:

我有一个列表定义为:

List<string> content = new List<string>() "Hello This", "This is", "This" ;

我想要一个代码来查找列表是否包含关键字 This,如果是,则获取它的第一次出现。

现有代码:

foreach(string line in content)
     if(line.Contains("This"))
          return line;

我想简单地知道是否有其他选择。如果我们知道完整的字符串,那么我们可以使用 List.Contains,但是对于子字符串,如何进行?

使用 .NET 2.0。请建议不要使用 LINQ。

【问题讨论】:

你当前的代码有什么问题? @DGibbs 没什么问题,但我想知道是否有更简单/直接的方法可以代替这个。 @B V Raman 这对我来说看起来非常简单。如果我不能使用 LINQ,我会这样做。我唯一建议的是确保您进行不区分大小写的比较/包含 我认为这已经是没有 LINQ 的最简单的解决方案了。 哪个版本的 C#?多个答案使用 lambda 表达式,但在 C# 3 之前不存在,后者是在 .NET 2.0 之后引入的。 【参考方案1】:

这是您在 C#2.0 中搜索的内容:

List<string> content = new List<string>()  "Hello This", "This is", "This" ;
string keyword = "This";
string element = content.Find(delegate(string s)  return s.Contains(keyword); );

【讨论】:

【参考方案2】:

Find()第一个符合指定条件的元素 谓词,如果找到的话;否则,T 类型的默认值Msdn

Find() 可从NET Framework 2.0

获得
 List<string> content = new List<string>()  "Hello This", "This is", "This" ;
 string firstOccurance = content.Find(g => g.Contains("This"));

【讨论】:

【参考方案3】:

正如MSDN 所述,FindIndexFramework 2.0 起可用,可用于解决您的问题。

FindIndex 搜索与指定谓词定义的条件匹配的元素,并返回整个 List 中第一次出现的从零开始的索引。

List<string> content = new List<string>()  "Hello This", "This is", "This" ;
var index = content.FindIndex(p => p.Contains("This"));
if (index >= 0)
    return content[index];

【讨论】:

【参考方案4】:

你可以使用 linq,这和你的 for 循环一样:

return content.FirstOrDefault(x => x.Contains("This"));

【讨论】:

他会想要 FirstOrDefault 因为他不知道列表中包含他正在搜索的项目... 谢谢,但是因为我在 .NET 2.0 上,所以没有 LINQ 的任何方法 Carra - 它的 linq "FirstOrDefault" 和 "Contains"。

以上是关于直接查找子字符串是不是是列表/数组的一部分的主要内容,如果未能解决你的问题,请参考以下文章

在字符串列表中查找相等的子字符串

在字符串中查找子字符串,但仅当整个单词?

Excel - 需要从数组中搜索列表单元格的子字符串,无法获得索引/匹配工作吗?

如何在字符串中查找子字符串(或如何 grep 变量)? [复制]

搜索元组列表以查找匹配子字符串的算法方法?

类型列表动态不是类型映射字符串动态的子类型