Content

Lua Table转C# Dictionary的方法示例(鲁a是什么地方的车牌)怎么可以错过

文章摘要

本文介绍了一个名为`SharpluaTable`的C#类,用于解析Lua表格结构。该类通过`Parse`方法接收一个Lua字符串(以`{`开头和`}`结尾),并将其解析为键值对存储在字典中。解析逻辑主要包括: 1. **格式检查**:确保输入字符串以`{`开头和`}`结尾。 2. **键值对处理**:遍历字符串,遇到`=`切换模式,将`=`前的字符作为键,后的内容作为值。 3. **括号匹配**:遇到`{`时,解析到对应的`}`,处理包含在 `{` 和 `}` 之间的内容作为值。 4. **逗号处理**:遇到逗号时,保存当前键值对并切换模式。 总结来说,该类实现了一种高效的Lua表格解析功能,适用于将Lua结构化数据转换为字典形式存储。

 class SharpluaTable { string luatable=””; //从{开始解析 //然后按等号分割,等号前后为一个键值对 //逗号之后,为另一个键值对 //如果遇到中途遇到{,一直解析到}为止,都为值 Dictionary<string, string> dic=new Dictionary<string, string>(); public Dictionary<string, string> Parse(string luatable) { this.luatable=luatable; //解析0位和最后一位,判断是否是luatable格式 if (luatable[0] !='{‘) { throw new Exception(“解析lua失败,格式错误”); } if (luatable[luatable.Length – 1] !=’}’) { throw new Exception(“解析lua失败,格式错误”); } string luaKey=string.Empty, LuaValue=string.Empty; //标示解析Key还是Value,如果true,那么解析到Key里面,如果是false,那么解析到value里面 bool iskey=true; for (int i=1; i < luatable.Length; i++) {          //如果是最后一个键值对,那么直接就完了 if (i+1==luatable.Length&&luatable[i]==’}’) { dic.Add(luaKey, LuaValue); luaKey=string.Empty; LuaValue=string.Empty; break; } //如果是逗号,那么存储当前的key value ,跳过当前字符解析 if (luatable[i]==’,’) { dic.Add(luaKey, LuaValue); luaKey=string.Empty; LuaValue=string.Empty; iskey=true; //跳过一个逗号,那么继续解析为key continue; } else { if (luatable[i]==’=’) { iskey=false; //如果是等号,那么解析为key,并跳过当前 continue; } //如果是二级的{,那么解析到}为止,并把当前的i的值移动到}的下标位置 if (luatable[i]=='{‘) { //LuaValue +=luatable[i]; int kuohaoCount=0; for (int j=i; j < luatable.Length; j++) { LuaValue +=luatable[j]; if (luatable[j]=='{‘) { kuohaoCount +=1; } if (luatable[j]==’}’) { kuohaoCount -=1; if (kuohaoCount==0) { i=j; break; } else { //kuohaoCount -=1; } } } } else { if (iskey) { luaKey +=luatable[i]; } else { LuaValue +=luatable[i]; } } } } return dic; }