refactor: improve SharedIdNames generation logic in GenModels.cs

- Refactored SharedIdNames generation to use a HashSet for collecting shared names
- Updated loop to iterate over KeyValuePair for clarity
- Added inline comments for better code understanding
- Simplified list initialization syntax
- Improved type annotations in foreach loops
This commit is contained in:
2026-04-02 14:28:23 +08:00
parent 424178719b
commit 0f32860526
+16 -10
View File
@@ -194,7 +194,6 @@ namespace ExcelTool.Parser
ParsedSheet audioSheet = parsedSheets.Find(s => s.SheetName == "AudioObject"); ParsedSheet audioSheet = parsedSheets.Find(s => s.SheetName == "AudioObject");
if (audioSheet == null) return; if (audioSheet == null) return;
// 假设字段名:Id(uint), Names(list<string>)
Dictionary<uint, List<string>> idToNames = new(); Dictionary<uint, List<string>> idToNames = new();
Dictionary<string, List<uint>> nameToIds = new(); Dictionary<string, List<uint>> nameToIds = new();
@@ -214,13 +213,13 @@ namespace ExcelTool.Parser
string rawNames = row.StrList[namesIndex]; string rawNames = row.StrList[namesIndex];
List<string> names = new(rawNames.Split([','], StringSplitOptions.RemoveEmptyEntries)); List<string> names = new(rawNames.Split([','], StringSplitOptions.RemoveEmptyEntries));
idToNames[id] = names; idToNames[id] = names; // 同一个ID对应了多少个不同的名字(Container)
foreach (var name in names) foreach (string name in names)
{ {
if (!nameToIds.TryGetValue(name, out var list)) if (!nameToIds.TryGetValue(name, out List<uint> list))
{ {
list = new List<uint>(); list = [];
nameToIds[name] = list; nameToIds[name] = list;
} }
list.Add(id); list.Add(id);
@@ -258,15 +257,22 @@ namespace ExcelTool.Parser
sb.Append("\t};\n\n"); sb.Append("\t};\n\n");
// SharedIdNames // SharedIdNames
sb.Append("\tpublic static readonly HashSet<string> SharedIdNames = new()\n\t{\n"); HashSet<string> sharedNames = [];
foreach (var kv in idToNames) foreach (KeyValuePair<uint, List<string>> keyValuePair in idToNames)
{ {
var names = kv.Value; if (keyValuePair.Value.Count > 1)
for (int i = 1; i < names.Count; i++)
{ {
sb.Append($"\t\t\"{names[i]}\",\n"); foreach (string name in keyValuePair.Value)
sharedNames.Add(name);
} }
} }
sb.Append("\tpublic static readonly HashSet<string> SharedIdNames = new()\n\t{\n");
foreach (string name in sharedNames)
{
sb.Append($"\t\t\"{name}\",\n");
}
sb.Append("\t};\n"); sb.Append("\t};\n");
sb.Append("}\n"); sb.Append("}\n");