You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从C#数组中获取仅出现一次的唯一元素

错误原因分析

Distinct()方法的作用仅为对序列做去重处理,只会把重复出现的元素保留单个实例。针对你给出的示例数组{11,11,11,14,11,11},去重后得到的序列是{11,14},调用First()自然返回第一个出现的11,和你要找「仅出现一次的元素」的需求完全不匹配。


修正后的实现代码

你可以通过分组统计元素出现次数的方式实现需求,最简LINQ写法如下:

public static int GetUnique(IEnumerable<int> numbers)
{
    return numbers
        .GroupBy(num => num)
        .First(group => group.Count() == 1)
        .Key;
}

如果需要兼容没有唯一出现元素的场景,避免抛出异常,可以调整为返回可空类型的版本:

public static int? GetUniqueOrDefault(IEnumerable<int> numbers)
{
    return numbers
        .GroupBy(num => num)
        .FirstOrDefault(group => group.Count() == 1)?
        .Key;
}

逻辑说明

  • GroupBy(num => num)会将序列中值相同的元素归为同一组,每个分组的Key为对应的元素值,分组内部包含所有该值的元素实例
  • First(group => group.Count() == 1)会筛选出元素出现次数恰好为1的分组,也就是你要找的唯一元素对应的分组
  • 最后取分组的Key即可得到目标值,针对你给出的示例数组运行后会正确返回14。

如果处理的序列元素量很大,还可以用字典计数优化性能,仅需遍历一次序列:

public static int GetUnique(IEnumerable<int> numbers)
{
    Dictionary<int, int> countDict = new Dictionary<int, int>();
    foreach (var num in numbers)
    {
        countDict[num] = countDict.TryGetValue(num, out int count) ? count + 1 : 1;
    }
    return countDict.First(kv => kv.Value == 1).Key;
}

内容的提问来源于stack exchange,提问作者user16612111

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:18:00