【问题标题】:Result of LINQ.Any to stringLINQ.Any 到字符串的结果
【发布时间】:2012-11-20 16:29:30
【问题描述】:

因此,我使用以下语句检查字符串是否包含数组中的某个单词:

if(stringArray.Any(s => stringToCheck.Contains(s)))

简单。现在找到了一个匹配项,并且该陈述为真。但我也想知道数组中的哪个项目与字符串匹配。上述 LINQ 语句中的占位符“s”在以下子句中不可用。

希望有人有想法。我可以遍历数组,是的,但是 LINQ 对我来说看起来更好。 =)

【问题讨论】:

  • stringArray.FirstOrDefault(s=>stringToCheck.Contains(s))
  • 看看FirstOrDefault

标签: c# string linq contains


【解决方案1】:
var match = stringArray.FirstOrDefault(s => stringToCheck.Contains(s));
if(match != null) {
    // match was found
}

【讨论】:

  • 'var vMediaLvlResult = oSDP.GetMediaLevels().FirstOrDefault(s => vRequest.URL.ToString().Contains(s));' 'if (vMediaLvlResult != null)' '{' ' //true' '}' 有效。谢谢@Christian-Hayter,我不知道“FirstOrDefault”。
  • @Tigran 我只需要字符串。 ;)
【解决方案2】:

如果想要输入列表中的所有字符串都符合条件,则需要使用Where

var matchingStrings = stringArray.Where(s => stringToCheck.Contains(s))

如果只想要第一个字符串,可以使用FirstOrDefault:

var firstMatchingString = stringArray
    .FirstOrDefault(s => stringToCheck.Contains(s))

有关所有可用方法的概述,请查看http://msdn.microsoft.com/en-us/library/bb341635.aspx

有关 Linq to Objects 的介绍,请在此处查看 101 个示例:http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

【讨论】:

  • @Tigran 从问题中不清楚是否需要索引;您的回答确实提供了该信息。
【解决方案3】:

另一个简单的解决方案(只需一个行代码)就是使用Select重载:

通过选择我们可以访问value index当代:

//Example:
string[] arr = new[] {"a", "bb", "ccc"}; 
var result = arr.Select((v,i)=>new {value=v, index=i}).Where(x=>x.value.Contains("c"));

这会产生如下结果:

{"ccc", 2}

【讨论】:

    【解决方案4】:

    另一种(更有效的)方法是Enumerable.Join

    IEnumerable<string> matches = from str1 in stringArray
                                  join str2 in stringToCheck on str1 equals str2
                                  select str1;
    if(matches.Any())
    {
        string allMatches = string.Join(", ", matches);
        Console.Write(allMatches);
    }
    

    Why is LINQ JOIN so much faster than linking with WHERE?

    或者使用Enumerable.Intersect 可能更有效:

    IEnumerable<string> matches = stringArray.Intersect(stringToCheck);
    foreach(string common in matches)
    {
        // ...
    }
    

    【讨论】:

      猜你喜欢
      • 2013-09-21
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      相关资源
      最近更新 更多