gpt4 book ai didi

c# - 递归过滤不可变列表

转载 作者:太空宇宙 更新时间:2023-11-03 17:01:33 25 4
gpt4 key购买 nike

假设我有一个整数数组,我需要按顺序返回一个包含所有可被 3 整除的数字的数组。

我得到了界面:

List<int> ListElementsDivisibleBy3Recursive(List<int> input)

所以它必须接受一个列表并返回一个列表,并递归地过滤它。我试过从列表的开头弹出元素,直到我找到一个符合要求条件的数字,这就是我被卡住的地方。我不知道如何进入下一个元素并保留与条件匹配的元素。这是我目前所拥有的:

static List<int> ListElementsDivisibleBy3Recursive(List<int> input)
{
if (input.Count == 0)
return input;
else if (input.ElementAt(0) % 3 == 0)
{
return ListElementsDivisibleBy3Recursive(input); <--I have no idea what to do here
}
else
{
input.RemoveAt(0);
return ListElementsDivisibleBy3Recursive(input);
}
}

如果允许我将指针传递到我所在的列表中的位置,那会容易得多,但我所拥有的只是输入列表和要使用的返回列表。如何在保留与条件匹配的元素的同时删除列表中的元素?或者我是不是以错误的方式去做这件事?不确定我应该如何从逻辑上解决这个问题。我也意识到我的基础条件也是错误的。

最佳答案

这是我能想到的唯一方法。每次递归都会删除最后一个元素,直到列表为空,然后当递归展开时,将满足条件的元素添加回列表的末尾。

List<int> ListElementsDivisibleBy3Recursive(List<int> input) {
if (input.Count > 0) {
int last = input.Last();
input.RemoveAt(input.Count - 1);
input = ListElementsDivisibleBy3Recursive(input);
if (last % 3 == 0)
input.Add(last);
}
return input;
}

尽管从该方法返回任何内容都没有意义,因为无论返回值如何,input 都会根据需要进行修改。所以这实现了相同的结果:

void ListElementsDivisibleBy3Recursive(List<int> input) {
if (input.Count > 0) {
int last = input.Last();
input.RemoveAt(input.Count - 1);
ListElementsDivisibleBy3Recursive(input);
if (last % 3 == 0)
input.Add(last);
}
}

关于c# - 递归过滤不可变列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28725800/

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