问题
我尝试使用内置方法array.Distinct.First()
从C#数组中返回一个唯一元素。该方法适用于某些数组,但为此数组{11,11,11,14,11,11}
返回错误的元素。它给了我一个11
的输出,这是不正确的,因为该数组中的唯一元素应该是14
。我知道有一种方法可以用predicate
函数来实现,但这正是我问的原因,我不知道
编码
public static int getUnique(IEnumerable<int> numbers){
return numbers.Distinct().First();
//you can bet i tried .FirstOrDefault()
//without any success
}
任何有助于使代码返回正确值的帮助都将受到高度赞赏。
6条答案
按热度按时间j0pj023g1#
这不是Distinct所做的。
它将从序列中返回不同的元素,从而删除重复的元素。
您只希望从没有重复项的项开始;
很明显,你想要第一个非重复值,所以你会得到这样的结果;
虽然这里有不同的空检查,这只是证明了一点。
6pp0gazn2#
如果使用distinct,则返回所有distinct元素。按以下方式获取唯一值
ykejflvf3#
一般来说,你应该按一个键对你的集合进行分组,然后按包含元素的数量对其进行过滤:
现在,这给了你 * 所有 * 唯一的数字。你的问题有点模糊,因为你想要一个唯一的数字-而不是唯一的数字,所以有解释的余地,如果有多个数字,应该发生什么。
选项1:只取第一个结果:
选项1.1对结果进行排序,取最小(或最大)的结果
选项2:确保只有一个唯一的数字,否则抛出:
注意:如果没有唯一的数字,
Single()
和First()
将抛出,其中SingleOrDefault()
和FirstOrDefault()
将返回int
的默认值,即0
,这可能导致错误的结果。您可以考虑将其更改为int?
,以便在没有唯一编号的情况下返回null
。des4xlb04#
你可以尝试下面的代码。
czq61nw15#
我为你做了一个特别的方法。我对这个问题的处理有点原始。由于这种方法,你可以很容易地找到唯一的变量。
sxpgvts36#
从整数数组中返回唯一元素非常简单,通过使用字典,创建一个新的字典来存储每个元素在数组中出现的次数,然后使用LINQ迭代字典以找到频率为1的所有元素,这意味着这些元素是唯一的。元素是键,频率是值.