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
|
|||
|
|
};
|
|||
|
|
```
|