gpt4 book ai didi

c# - 在不使用 List 的情况下如何在 C# 中执行此操作?

转载 作者:行者123 更新时间:2023-11-30 20:14:49 26 4
gpt4 key购买 nike

我是 C# 新手。以下代码是我为解决挑战而提出的解决方案。我不确定如何在不使用 List 的情况下执行此操作,因为我的理解是您不能推送到 C# 中的数组,因为它们的大小是固定的。

到目前为止,我对我所说的内容的理解是否正确?

有没有一种方法不需要每次我需要添加到数组时都创建一个新数组?如果没有其他方法,在循环开始之前数组的大小未知时,我将如何创建一个新数组?

Return a sorted array of all non-negative numbers less than the given n which are divisible both by 3 and 4. For n = 30, the output should be

threeAndFour(n) = [0, 12, 24].

int[] threeAndFour(int n) {
List<int> l = new List<int>(){ 0 };

for (int i = 12; i < n; ++i)
if (i % 12 == 0)
l.Add(i);

return l.ToArray();
}

编辑:我已经将这段代码重构为..

int[] threeAndFour(int n) {
List<int> l = new List<int>(){ 0 };

for (int i = 12; i < n; i += 12)
l.Add(i);

return l.ToArray();
}

最佳答案

A.列表是可以的

如果你想使用 for找出数字,然后 List是用于在发现数字时收集数字的适当数据结构。

B.多用数学

static int[] threeAndFour(int n) {
var a = new int[(n / 12) + 1];
for (int i = 12; i < n; i += 12) a[i/12] = i;
return a;
}

C.生成器模式 IEnumerable<int>

我知道这不会返回数组,但它确实避免了列表。

static IEnumerable<int>  threeAndFour(int n) {
yield return 0;

for (int i = 12; i < n; i += 12)
yield return i;
}

D.转身避开 list

代码可以for两次。首先计算大小或数组,然后填充它。

int[] threeAndFour(int n) {
// Version: A list is really undesirable, arrays are great.
int size = 1;
for (int i = 12; i < n; i += 12)
size++;
var a = new int[size];
a[0] = 0;
int counter = 1;
for (int i = 12; i < n; i += 12) a[counter++] = i;
}

关于c# - 在不使用 List 的情况下如何在 C# 中执行此操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58905819/

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