返回数组,其元素只能重复N次

时间:2017-05-01 21:02:52

标签: 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}。我不希望删除第一个重复的元素。 这就是我的尝试:

null

我真的很感激任何帮助或指导。

2 个答案:

答案 0 :(得分:1)

我建议使用Dictionary<T, int>来计算外观:

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;
  }
}

...

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));

答案 1 :(得分:0)

我会使用字典来跟踪每个整数遇到的次数:

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);
    }
}