gpt4 book ai didi

Lua Table转C# Dictionary的方法示例

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Lua Table转C# Dictionary的方法示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

table特性 。

table是一个“关联数组”,数组的索引可以是数字或者是字符串,所有索引值都需要用 "["和"]" 括起来;如果是字符串,还可以去掉引号和中括号; 即如果没有[]括起,则认为是字符串索引 。

table 的默认初始索引一般以 1 开始,如果不写索引,则索引就会被认为是数字,并按顺序自动从1往后编; 。

table 的变量只是一个地址引用,对 table 的操作不会产生数据影响 。

table 不会固定长度大小,有新数据插入时长度会自动增长 。

table 里保存数据可以是任何类型,包括function和table; 。

table所有元素之间,总是用逗号 "," 隔开; 。

引言 。

因为在游戏公司做web后台开发,经常会涉及到取游戏服务器的数据库里面读写各种操作.

昨天下午,服务器那边让我读一个配置显示到后台,让运营大佬们可以在web后台配置游戏参数.

本来以为很简单个事情,结果我读出那个二进制的字段,居然是这种格式 。

?
1
{1=0,2=0,3=0,4=2,5={},6=0,7={1=118,s010GameConfig={s008wPayType=0,s009wCostType=0,s015dwReservedRule3=3,s015dwReservedRule2=0,s006ClubId=0,s010wCostValue=0,s010wCellScore=1,s014wPlayCountRule=10,s013wHadPlayCount=0,s010dwPlayRule=0,s010wSubGameID=114,s009wMaxScore=0,s015dwReservedRule1=0,s015sPrivateTableID=0}

服务器的兄弟告诉我,这是lua的table。。。很简单啦,就这样。。。(此处省略几百字) 。

然后我 。

然后我在网上搜索有么有前辈大佬留下的现成轮子。。。结果不是要加载一个lua vm的虚拟机库就是各种麻烦还不知道能不能解决的一些方案。。。.

博主好歹也是有四年+工作经验的人了,没有合适的就自己写嘛,就当锻炼一下自己咯 。

新建一个项目,取了一个好听的名字SharpluaTable 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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;
  }

目前前这个解析类只做了一层解析,如果value值有多层级,我默认把它解析到value里面 。

测试一下 。

?
1
2
3
4
5
6
7
string luatable = "{1=0,2=0,3=0,4=2,5={},6=0,7={1=118,s010GameConfig={s008wPayType=0,s009wCostType=0,s015dwReservedRule3=3,s015dwReservedRule2=0,s006ClubId=0,s010wCostValue=0,s010wCellScore=1,s014wPlayCountRule=10,s013wHadPlayCount=0,s010dwPlayRule=0,s010wSubGameID=114,s009wMaxScore=0,s015dwReservedRule1=0,s015sPrivateTableID=0},s006GameID=114},8=1}" ;
 
    SharpluaTable lua = new SharpluaTable();
    var dic = lua.Parse(luatable);
    Console.WriteLine(dic[ "7" ]);
    SharpluaTable luaitem = new SharpluaTable();
     var items = luaitem.Parse(dic[ "7" ]);

Lua Table转C# Dictionary的方法示例

如果有多层级的,那就再new一个SharpLuaTable对象,再进行一次解析就好了 。

已经提交到Nuget上了,有需要使用大兄弟可以直接命令 。

?
1
Install-Package LuaTableToCSharp -Version 1.0.3

代码提交到了github,:https://github.com/QingChengCoder/LuaTableToCSharp 。

总结 。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我的支持.

原文链接:http://www.cnblogs.com/boxrice/p/8512790.html 。

最后此篇关于Lua Table转C# Dictionary的方法示例的文章就讲到这里了,如果你想了解更多关于Lua Table转C# Dictionary的方法示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com