确定数组中是否存在一个int值

时间:2013-01-11 02:44:43

标签: c# linq

我知道你可以在LINQ中使用Any,Exists和Single,但是不能让它工作。我需要根据id进行查找,看看它是否在数组中,并确保该值只有一个匹配。因为如果有2会导致问题..我正在检查的要求是数组中只有一个且只有一个ID在数组中。

这是我试过的

if(someIntArray.Single(item => item = 3)
    //... we found the value 8 in the array only once so now we can be confident and do something 

5 个答案:

答案 0 :(得分:3)

以下是我将如何解决这个问题:

if (someIntArray.Count(item => item == 3) == 1)
{
    //only one '3' found in the array
    ...
}

答案 1 :(得分:1)

我认为你是在思考这个问题。

var targetNumber = 3;
var hasExactlyOne = someIntArray.Count(i => i == targetNumber) == 1;

答案 2 :(得分:1)

我为这种情况创建了一个One()扩展方法集:

public static bool One<T>(this IEnumerable<T> sequence)
{
   var enumerator = sequence.GetEnumerator();
   return enumerator.MoveNext() && !enumerator.MoveNext();
}

public static bool One<T>(this IEnumerable<T> sequence, Func<T, bool> predicate)
{
   return sequence.Where(predicate).One();
}

//usage
if (someIntArray.One(item => item == 3)) ...

Single()的问题在于,如果没有一个元素,它会引发异常。你可以将它包装在try-catch中,但是在大多数情况下,这些都是更多的匹配元素,它们比Count()更清晰,更有效。不幸的是,没有办法检查整个数组以验证没有元素或只有一个与谓词匹配,但如果有两个或更多,这将至少“快速失败”,其中Count()将始终评估整个Enumerable是否有一个匹配元素或50个。

答案 3 :(得分:0)

使用LINQ表达式:

var duplicates = from i in new int[] { 2,3,4,4,5,5 }
                 group i by i into g
                 where g.Count() > 1
                 select g.Key

结果:

{4,5}

当然,你可以检查duplicates.Count() > 0或记录那些有问题或者你需要做的事情。

答案 4 :(得分:-2)

让它运转起来:

if(someIntArray.Single(item => item = 3) > 0)

DOH