【发布时间】:2020-03-13 07:21:25
【问题描述】:
我是 C# 新手。以下代码是我为解决挑战而提出的解决方案。我不确定如何在不使用 List 的情况下执行此操作,因为我的理解是您无法推送到 C# 中的数组,因为它们的大小是固定的。
到目前为止,我对我所说的话的理解是否正确?
有没有一种方法可以在每次需要添加到数组时不涉及创建新数组?如果没有其他方法,当我的循环开始之前数组的大小未知时,我将如何创建一个新数组?
返回所有小于给定 n 且可被 3 和 4 整除的非负数的排序数组。对于 n = 30,输出应为
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();
}
【问题讨论】:
-
(n / 12) + 1 是数组所需的大小。
-
数组确实是固定大小的。列表只不过是数组的包装器,让它们自动增长。 List 也可以通过 ToArray() 转换为数组。制作一个可以增长的集合的唯一另一种方法是链接列表。但在非常特殊的情况下,这些都是无用的。
-
有趣的事实。 'List` 只不过是一个数组的管理包装器(如果数组已满,它们会将大小加倍并复制所有元素)。但是,如果您想要不同的数据结构来处理添加未知数量的元素而不使用数组,您可以查看链表(基本上每个项目都包装在指向下一个项目的包装器中)