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

求C#中按元素出现次数从数组移除匹配项的方法(Linq优先)

解决方案

需求明确:从数组arr1中移除arr2内各元素对应的出现次数,保留剩余元素(需考虑元素重复出现的次数,而非简单的集合交集/差集)。

实现思路

  1. 先统计arr2中每个元素的出现次数,用字典存储键值对(元素: 出现次数)
  2. 遍历arr1的每个元素,若该元素在字典中还有可移除次数,则减少对应计数并跳过该元素;否则保留该元素

Linq实现代码

using System.Linq;
using System.Collections.Generic;

public static class ArrayHelper
{
    public static int[] GetLeftElements(int[] arr1, int[] arr2)
    {
        var elementCountMap = arr2.GroupBy(item => item)
                                  .ToDictionary(group => group.Key, group => group.Count());

        return arr1.Where(item => 
        {
            if (elementCountMap.TryGetValue(item, out int remaining) && remaining > 0)
            {
                elementCountMap[item]--;
                return false;
            }
            return true;
        }).ToArray();
    }
}

测试示例

int[] arr1 = new int[] { 1, 1, 1, 2, 3 };
int[] arr2 = new int[] { 1, 2 };
int[] result = ArrayHelper.GetLeftElements(arr1, arr2);
// 输出结果:{ 1, 1, 3 },完全符合需求

关于Intersect的问题

Intersect方法的作用是取两个集合的去重交集,它只判断元素是否同时存在于两个集合中,完全不考虑元素的出现次数,所以无法满足你的需求,因此不能使用这个方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:46:02