五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動態(tài)

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

發(fā)布日期:2022-01-30 15:46 | 文章來源:源碼中國

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所有元素之間,總是用逗號 "," 隔開;

引言

因為在游戲公司做web后臺開發(fā),經(jīng)常會涉及到取游戲服務(wù)器的數(shù)據(jù)庫里面讀寫各種操作。

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

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

{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īng)驗的人了,沒有合適的就自己寫嘛,就當(dāng)鍛煉一下自己咯

新建一個項目,取了一個好聽的名字SharpluaTable

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里面

測試一下

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"]);

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

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

Install-Package LuaTableToCSharp -Version 1.0.3

代碼提交到了github,:https://github.com/QingChengCoder/LuaTableToCSharp,大家也可以本地下載

總結(jié)

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

美國快速服務(wù)器

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部