我正在尝试练习一些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
我真的很感激任何帮助或指导。
答案 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);
}
}