一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Lua - Lua Table轉(zhuǎn)C# Dictionary的方法示例

Lua Table轉(zhuǎn)C# Dictionary的方法示例

2020-05-08 10:44青城大兄弟 Lua

這篇文章主要給大家介紹了關(guān)于Lua Table轉(zhuǎn)C# Dictionary的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

table特性

table是一個“關(guān)聯(lián)數(shù)組”,數(shù)組的索引可以是數(shù)字或者是字符串,所有索引值都需要用 "["和"]" 括起來;如果是字符串,還可以去掉引號和中括號; 即如果沒有[]括起,則認(rèn)為是字符串索引

table 的默認(rèn)初始索引一般以 1 開始,如果不寫索引,則索引就會被認(rèn)為是數(shù)字,并按順序自動從1往后編;

table 的變量只是一個地址引用,對 table 的操作不會產(chǎn)生數(shù)據(jù)影響

table 不會固定長度大小,有新數(shù)據(jù)插入時長度會自動增長

table 里保存數(shù)據(jù)可以是任何類型,包括function和table;

table所有元素之間,總是用逗號 "," 隔開;

引言

因?yàn)樵谟螒蚬咀鰓eb后臺開發(fā),經(jīng)常會涉及到取游戲服務(wù)器的數(shù)據(jù)庫里面讀寫各種操作。

昨天下午,服務(wù)器那邊讓我讀一個配置顯示到后臺,讓運(yùn)營大佬們可以在web后臺配置游戲參數(shù)。

本來以為很簡單個事情,結(jié)果我讀出那個二進(jìn)制的字段,居然是這種格式

?
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}

服務(wù)器的兄弟告訴我,這是lua的table。。。很簡單啦,就這樣。。。(此處省略幾百字)

然后我

然后我在網(wǎng)上搜索有么有前輩大佬留下的現(xiàn)成輪子。。。結(jié)果不是要加載一個lua vm的虛擬機(jī)庫就是各種麻煩還不知道能不能解決的一些方案。。。。

博主好歹也是有四年+工作經(jīng)驗(yàn)的人了,沒有合適的就自己寫嘛,就當(dāng)鍛煉一下自己咯

新建一個項目,取了一個好聽的名字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;
  //標(biāo)示解析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;  }
  //如果是逗號,那么存儲當(dāng)前的key value ,跳過當(dāng)前字符解析
  if (luatable[i] == ',')
  {
   dic.Add(luaKey, LuaValue);
   luaKey = string.Empty;
   LuaValue = string.Empty;
   iskey = true; //跳過一個逗號,那么繼續(xù)解析為key
   continue;
  }
  else
  {
   if (luatable[i] == '=')
   {
   iskey = false; //如果是等號,那么解析為key,并跳過當(dāng)前
   continue;
   }
   //如果是二級的{,那么解析到}為止,并把當(dāng)前的i的值移動到}的下標(biāo)位置
   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值有多層級,我默認(rèn)把它解析到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轉(zhuǎn)C# Dictionary的方法示例

如果有多層級的,那就再new一個SharpLuaTable對象,再進(jìn)行一次解析就好了

已經(jīng)提交到Nuget上了,有需要使用大兄弟可以直接命令

?
1
Install-Package LuaTableToCSharp -Version 1.0.3

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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對服務(wù)器之家的支持。

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

延伸 · 閱讀

精彩推薦
  • LuaLua教程(二):基礎(chǔ)知識、類型與值介紹

    Lua教程(二):基礎(chǔ)知識、類型與值介紹

    這篇文章主要介紹了Lua教程(二):基礎(chǔ)知識、類型與值介紹,本文講解了Hello World程序、代碼規(guī)范、全局變量、類型與值等內(nèi)容,需要的朋友可以參考下 ...

    腳本之家5922020-04-28
  • LuaLua中的元方法__newindex詳解

    Lua中的元方法__newindex詳解

    這篇文章主要介紹了Lua中的元方法__newindex詳解,本文講解了查詢與更新、監(jiān)控賦值、通過table給另一個table賦值等內(nèi)容,需要的朋友可以參考下 ...

    笨木頭8872020-04-09
  • LuaLua和C語言的交互詳解

    Lua和C語言的交互詳解

    這篇文章主要介紹了Lua和C語言的交互詳解,Lua和C語言通過棧完成交互,本文結(jié)合代碼實(shí)例詳細(xì)講解了交互的方法,需要的朋友可以參考下 ...

    果凍想3702020-04-14
  • LuaLua中table庫函數(shù)方法介紹

    Lua中table庫函數(shù)方法介紹

    這篇文章主要介紹了Lua中table庫函數(shù)方法介紹,本文講解了concat、insert、maxn、remove、sort、foreachi等方法,需要的朋友可以參考下 ...

    腳本之家2502020-04-17
  • LuaLua實(shí)現(xiàn)__add方法重載示例

    Lua實(shí)現(xiàn)__add方法重載示例

    這篇文章主要介紹了Lua實(shí)現(xiàn)__add方法重載示例,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下 ...

    腳本之家7452020-04-24
  • LuaLua中計算、執(zhí)行字符串中Lua代碼的方法

    Lua中計算、執(zhí)行字符串中Lua代碼的方法

    這篇文章主要介紹了Lua中計算、執(zhí)行字符串中Lua代碼的方法,類似JavaScript中eval函數(shù)的功能,在Lua中也可以實(shí)現(xiàn),需要的朋友可以參考下 ...

    腳本之家6322020-04-30
  • Lua深入探究Lua中的解析表達(dá)式

    深入探究Lua中的解析表達(dá)式

    這篇文章主要介紹了深入探究Lua中的解析表達(dá)式,對于其語法部分的說明和示例都超詳細(xì),極力推薦此文!需要的朋友可以參考下 ...

    腳本之家3542020-05-05
  • LuaLua簡介、編譯安裝教程及變量等語法介紹

    Lua簡介、編譯安裝教程及變量等語法介紹

    這篇文章主要介紹了Lua簡介、編譯安裝教程及變量等語法介紹,本文同時講解了lua注釋語法、Lua命令行方式等內(nèi)容,需要的朋友可以參考下 ...

    junjie3632020-04-14
主站蜘蛛池模板: 日本三级香港三级久久99 | 免费看国产一级片 | 男人与雌性宠物交啪啪小说 | 精品91 | 亚洲成综合 | 成人影音先锋 | 美女张开腿让男人桶的 视频 | 女人用粗大自熨喷水在线视频 | 国产精品久久久久久久久免费观看 | 含羞草传媒每天免费一次破解 | 国产成人免费片在线观看 | 色婷婷在线 | 狠狠色综合久久婷婷 | 深夜免费看 | 操女人bb| 高清色黄毛片一级毛片 | 日本一区二区视频在线观看 | 日本人泡妞18xxⅹ | 污小说在线阅读 | 99国产热 | 国产情侣自拍网 | 99视频在线观看免费视频 | 男人天堂视频网 | 色网在线视频 | 青草草产国视频 | 8x在线永久成人影院 | 999导航| 亚洲成人免费看 | 韩国女主播在线大尺无遮挡 | 奇米影视久久 | 亚洲麻豆精品果冻传媒 | 欧美yyy| 亚洲精品一区二区三区在线播放 | 超91精品手机国产在线 | 亚洲激情成人 | japanesqirl日本护士 | 久久精品亚洲牛牛影视 | 精品国产免费一区二区三区 | 国产成人精品高清在线观看99 | 第一国内永久免费福利视频 | 欧美亚洲桃花综合 |