C# 返回元素只能重复N次的数组

C# 返回元素只能重复N次的数组,c#,C#,我试图练习一些c#问题,我遇到了一个问题,给定一个整数数组,返回数组中只能重复N次的元素。所以,如果我有{1,2,3,4,1,1,2,3}并且我的N=2,我的结果应该是{1,2,3,4,1,2,3}。我尝试了一些东西,但得到的结果是{2,3,4,1,1,2,3}。我不想删除第一个重复的元素。 这就是我尝试过的: int[] intArray = {3,2,3,1,3}; int N = 2; var list = new Lis

我试图练习一些c#问题,我遇到了一个问题,给定一个整数数组,返回数组中只能重复N次的元素。所以,如果我有{1,2,3,4,1,1,2,3}并且我的N=2,我的结果应该是{1,2,3,4,1,2,3}。我尝试了一些东西,但得到的结果是{2,3,4,1,1,2,3}。我不想删除第一个重复的元素。 这就是我尝试过的:

        int[] intArray = {3,2,3,1,3};          
        int N = 2;
        var list = new List<int>(intArray);
        var newList = new List<int>();

        for (int i = 0; i < list.Count; i++)
        {

            int occur = 1;
            for (int j = i+1; j < list.Count; j++)
            {
                if (occur < N && list[i] == list[j])
                {
                    occur++;
                    newList.Add(list[j]);
                }
                else
                {
                    if (list[i] == list[j] )
                        list.Remove(list[j]);
                }
            }

        }
        foreach (var l in list)
        {
            Console.WriteLine(l);
        }



    }
}
int[]intArray={3,2,3,1,3};
int N=2;
var列表=新列表(intArray);
var newList=新列表();
for(int i=0;i

我非常感谢任何帮助或指导。

我会使用字典记录每个整数遇到的次数:

int[] intArray = { 1, 2, 3, 4, 1, 1, 2, 3 };
int N = 2;
var lookup = new Dictionary<int, int>();
LIst<int> list = new List<int>();

foreach (int num in intArray)
{
    if (!lookup.ContainsKey(num))
    {
        lookup[num] = 1;
        list.Add(num);
    }
    else if (lookup[num]++ < N)
    {
        list.Add(num);
    }
}
int[]intArray={1,2,3,4,1,1,2,3};
int N=2;
var lookup=newdictionary();
列表=新列表();
foreach(intArray中的int num)
{
如果(!lookup.ContainsKey(num))
{
查找[num]=1;
列表。添加(num);
}
else if(查找[num]+
我建议使用
字典
来计算出场次数:

private static IEnumerable<T> RepeatOnly<T>(IEnumerable<T> source, int times) {
  Dictionary<T, int> counts = new Dictionary<T, int>();

  foreach (var item in source) {
    int count;

    if (counts.TryGetValue(item, out count))
      counts[item] = ++count;
    else 
      counts.Add(item, count = 1);

    if (count <= times)
      yield return item;
  }
}

我不会问你是怎么在不到5分钟的时间里做到这一点的,但这是可行的。非常感谢。很乐意帮忙!:)
int[] source = new int[] { 1, 2, 3, 4, 1, 1, 2, 3 };

int[] result = RepeatOnly(source, 2).ToArray(); 

Console.Write(string.Join(Environment.NewLine, result));