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:
@@ -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");
|
||||||
|
|||||||
Reference in New Issue
Block a user