gpt4 book ai didi

c# - 从列表中删除多余的项目时,枚举器陷入无限循环

转载 作者:太空狗 更新时间:2023-10-30 00:04:36 25 4
gpt4 key购买 nike

我有一个脚本,它接受一个 int[] 数组,将其转换为一个列表并删除所有进一步出现的已经至少出现 2 次的整数。我遇到的问题是,当它进入我正在检查每个整数出现次数的循环时,我陷入了循环。

编辑:“我遗漏的是列表必须保持其原始顺序,以便从上到下删除多余的数字。抱歉,如果这让那些已经回答的人感到困惑!

我认为 occursintegerOccurrence 的变化次数将作为 while 循环的计数变化。

关于我在这里缺少什么的任何想法?除了任何可辨别的技能。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Remoting.Messaging;

public class Kata
{
public static void Main()
{
int[] arr = new int[] {1, 2, 1, 4, 5, 1, 2, 2, 2};
int occurrenceLimit = 2;
var intList = arr.ToList();

for (int i = 0; i < intList.Count; i++)
{
var occursintegerOccurrence = intList.Count(n => n == occurrenceLimit);

do
{
occursintegerOccurrence = intList.Count(n => n == occurrenceLimit);
foreach (var x in intList)
{
Console.WriteLine(x);
intList.Remove(intList.LastIndexOf(occurrenceLimit));
// Tried changing the count here too
occursintegerOccurrence = intList.Count(n => n == occurrenceLimit);
}
} while (occursintegerOccurrence > occurrenceLimit);
}
}
}

最佳答案

这是一个相当简洁的版本,假设您要删除所有计数超过 2 的整数实例,将包的其余部分保留在其原始序列中,优先保留从左到右遍历:

int[] arr = new int[] {1, 2, 1, 4, 5, 1, 2, 2, 2};
var ints = arr.Select((n, idx) => new {n, idx})
.GroupBy(x => x.n)
.SelectMany(grp => grp.Take(2))
.OrderBy(x => x.idx)
.Select(x => x.n)
.ToList();

结果:

1, 2, 1, 4, 5, 2

它的工作原理是使用 Select 的索引重载来投影一个匿名 Tuple 并执行原始顺序以允许在最后重新排序。

关于c# - 从列表中删除多余的项目时,枚举器陷入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38380823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com