136 lines
2.5 KiB
Markdown
136 lines
2.5 KiB
Markdown
# 第七课:集合(List / Dictionary)
|
||
|
||
## List<T> 动态数组
|
||
|
||
`T` 是泛型,占位符,使用时替换成具体类型。
|
||
|
||
```csharp
|
||
using System.Collections.Generic;
|
||
|
||
// 声明
|
||
List<string> names = new List<string>();
|
||
|
||
// 添加
|
||
names.Add("无言势");
|
||
names.Add("字幕");
|
||
names.Add("工具");
|
||
|
||
// 插入(指定位置)
|
||
names.Insert(1, "新插入");
|
||
|
||
// 删除
|
||
names.Remove("字幕");
|
||
names.RemoveAt(0); // 按索引删除
|
||
|
||
// 访问
|
||
string first = names[0];
|
||
|
||
// 数量
|
||
int count = names.Count;
|
||
|
||
// 遍历
|
||
foreach (string name in names)
|
||
{
|
||
Console.WriteLine(name);
|
||
}
|
||
```
|
||
|
||
## 初始化器
|
||
|
||
```csharp
|
||
// 声明时直接填充
|
||
List<string> fruits = new List<string>()
|
||
{
|
||
"苹果", "香蕉", "橙子"
|
||
};
|
||
|
||
// 简写(C# 12+)
|
||
List<string> fruits2 = ["苹果", "香蕉", "橙子"];
|
||
```
|
||
|
||
## 常用方法
|
||
|
||
```csharp
|
||
List<int> numbers = new List<int>() { 3, 1, 4, 1, 5 };
|
||
|
||
numbers.Sort(); // 排序
|
||
numbers.Reverse(); // 反转
|
||
numbers.Contains(5); // 是否包含
|
||
numbers.IndexOf(4); // 查找索引
|
||
numbers.Clear(); // 清空
|
||
numbers.InsertRange(0, ...); // 插入集合
|
||
```
|
||
|
||
## Dictionary<K, V> 键值对
|
||
|
||
```csharp
|
||
using System.Collections.Generic;
|
||
|
||
// 声明
|
||
Dictionary<string, int> scores = new Dictionary<string, int>();
|
||
|
||
// 添加
|
||
scores["无言势"] = 100;
|
||
scores["玩家A"] = 85;
|
||
scores.Add("玩家B", 90);
|
||
|
||
// 访问
|
||
int score = scores["无言势"]; // 100
|
||
|
||
// 安全访问(键不存在不报错)
|
||
scores.TryGetValue("不存在", out int value);
|
||
|
||
// 是否包含键
|
||
if (scores.ContainsKey("无言势"))
|
||
{
|
||
Console.WriteLine(scores["无言势"]);
|
||
}
|
||
|
||
// 删除
|
||
scores.Remove("玩家A");
|
||
|
||
// 遍历
|
||
foreach (KeyValuePair<string, int> kv in scores)
|
||
{
|
||
Console.WriteLine($"{kv.Key}: {kv.Value}");
|
||
}
|
||
|
||
// 只遍历键或值
|
||
foreach (string key in scores.Keys) { }
|
||
foreach (int value in scores.Values) { }
|
||
```
|
||
|
||
## Dictionary 初始化
|
||
|
||
```csharp
|
||
// C# 6+
|
||
Dictionary<string, int> config = new Dictionary<string, int>()
|
||
{
|
||
["sensitivity"] = 70,
|
||
["volume"] = 80,
|
||
["language"] = 1
|
||
};
|
||
```
|
||
|
||
## List 和 Dictionary 在项目中的应用
|
||
|
||
```csharp
|
||
// 识别结果历史
|
||
List<string> transcriptHistory = new List<string>();
|
||
|
||
// 设备配置
|
||
Dictionary<string, string> deviceConfig = new Dictionary<string, string>()
|
||
{
|
||
["name"] = "USB麦克风",
|
||
["sampleRate"] = "16000",
|
||
["channels"] = "1"
|
||
};
|
||
|
||
// 设置选项
|
||
Dictionary<string, bool> settings = new Dictionary<string, bool>()
|
||
{
|
||
["autoConnect"] = true,
|
||
["vad"] = true
|
||
};
|
||
```
|