【学习笔记】创建数组并初始化

TypeScript

1.创建数组

// 初始化一维数组,并且塞数据
const a: number[] = new Array(5).fill(0);

// 初始化二维数组
const b: number[][] = Array.from({length:5}, ()=>new Array(2).fill(0));

Array.from()
核心: 把“长得像数组的东西”或者“可以被循环遍历的东西”,一键变成一个 “货真价实的新数组”
能力:

  • 制造指定长度的空壳对象
  • 把字符串拆成单字符数组
  • 把 Set(去重集合)转回数组
  • 除了接收第一个参数(伪数组),还可以接收第二个参数 —— 一个回调函数。这个回调函数的神奇之处在于:数组有多少项,这个函数就会被老老实实地执行多少次。 每执行一次,就当场 new 一个新对象返回。

⚠️直接使用Array.fill(new Array().fill()),内的new只运用一次,而每一行都只是引用了同样的数组。

C#

接口不可以直接new。接口是用来当做 “规范” 的,本身没有具体的实现代码。
所以比如:不能直接 new IList(...)。必须 new 一个实现了这个接口的实体类。

List

C# 的 List(容量) 构造函数不等于“填充元素”。

new List<int>(n) 括号里的 \(n\) 代表的是 Capacity(容量/蓄水池大小),执行完后,这个 List 依然是空的(Count 为 0)

C# 的 List 没有 new List(数量, 默认值) 这种构造函数,它不接受第二个参数。

那这样子的话,怎么初始化呀?

两个方法:

1.传统的双重循环

先创建外层大箱子,然后通过循环往里面塞内层的小箱子,并用 .Add(0) 把它真正填满。

2.利用new int[n]

for (int i = 0; i < m; i++) {
    // new int[n] 会自动生成一个包含 n 个 0 的数组
    // List 的构造函数接受这个数组,并直接把它转换成一个 Count 为 n 的 List
    res.Add(new List<int>(new int[n]));
}

3.纯 LINQ

C# 的 LINQ 提供了 Enumerable.Repeat 机制:

IList<IList<int>> res = Enumerable.Range(0, m)
    .Select(_ => (IList<int>)Enumerable.Repeat(0, n).ToList())
    .ToList();
  • Enumerable.Repeat(0, n): 把 0 重复 n 次。
  • Enumerable.Range(0, m):从0开始递增生成m次。
  • Select(_ => ...):重复 m 次这样的操作。

在 C# 中,下划线 _ 是一个专有语法,叫做丢弃(Discard)。就是不要了原本的数据,只要后面的运算。
⚠️直接使用Enumerable.Repeat((IList<int>)new List<int>(new int[n]), m).ToList(),内的new也只运用一次,而每一行都只是引用了同样的数组。

posted @ 2026-07-20 15:25  SEHOD  阅读(0)  评论(0)    收藏  举报