最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2018年03月09日 08:52:54   作者:青城大兄弟  
這篇文章主要給大家介紹了關(guān)于Lua Table轉(zhuǎn)C# Dictionary的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。

table特性

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

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

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

table 不會(huì)固定長(zhǎng)度大小,有新數(shù)據(jù)插入時(shí)長(zhǎng)度會(huì)自動(dòng)增長(zhǎng)

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

table所有元素之間,總是用逗號(hào) "," 隔開(kāi);

引言

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

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

本來(lái)以為很簡(jiǎn)單個(gè)事情,結(jié)果我讀出那個(gè)二進(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。。。很簡(jiǎn)單啦,就這樣。。。(此處省略幾百字)

然后我

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

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

新建一個(gè)項(xiàng)目,取了一個(gè)好聽(tīng)的名字SharpluaTable

class SharpluaTable
 {
 string luatable = "";
 //從{開(kāi)始解析
 //然后按等號(hào)分割,等號(hào)前后為一個(gè)鍵值對(duì)
 //逗號(hào)之后,為另一個(gè)鍵值對(duì)
 //如果遇到中途遇到{,一直解析到}為止,都為值
 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失敗,格式錯(cuò)誤");
  }

  if (luatable[luatable.Length - 1] != '}')
  {
  throw new Exception("解析lua失敗,格式錯(cuò)誤");
  }
  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++)
  {          //如果是最后一個(gè)鍵值對(duì),那么直接就完了  if (i+1==luatable.Length&&luatable[i]=='}')  {   dic.Add(luaKey, LuaValue);   luaKey = string.Empty;   LuaValue = string.Empty;     break;  }
  //如果是逗號(hào),那么存儲(chǔ)當(dāng)前的key value ,跳過(guò)當(dāng)前字符解析
  if (luatable[i] == ',')
  {
   dic.Add(luaKey, LuaValue);
   luaKey = string.Empty;
   LuaValue = string.Empty;
   iskey = true; //跳過(guò)一個(gè)逗號(hào),那么繼續(xù)解析為key
   continue;
  }
  else
  {
   if (luatable[i] == '=')
   {
   iskey = false; //如果是等號(hào),那么解析為key,并跳過(guò)當(dāng)前
   continue;
   }
   //如果是二級(jí)的{,那么解析到}為止,并把當(dāng)前的i的值移動(dòng)到}的下標(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;
 }

目前前這個(gè)解析類只做了一層解析,如果value值有多層級(jí),我默認(rèn)把它解析到value里面

測(cè)試一下

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

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

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

Install-Package LuaTableToCSharp -Version 1.0.3

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

總結(jié)

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

相關(guān)文章

  • 用sysbench來(lái)測(cè)試MySQL的性能的教程

    用sysbench來(lái)測(cè)試MySQL的性能的教程

    這篇文章主要介紹了用sysbench來(lái)測(cè)試MySQL的性能的教程,使用Lua腳本操作,需要的朋友可以參考下
    2015-04-04
  • Lua學(xué)習(xí)筆記之表達(dá)式

    Lua學(xué)習(xí)筆記之表達(dá)式

    在Lua中,表達(dá)式包括:數(shù)值常量、字符串字面值、變量、單目和雙目運(yùn)算符,函數(shù)調(diào)用,也包括一些非傳統(tǒng)的函數(shù)定義和表結(jié)構(gòu)。今天我們就來(lái)詳細(xì)了解下lua中的表達(dá)式
    2015-04-04
  • ubuntu 14.04下熟悉lua的語(yǔ)法

    ubuntu 14.04下熟悉lua的語(yǔ)法

    擺在本人目前來(lái)說(shuō)最大的困難就是迅速熟悉Lua語(yǔ)言,后續(xù)的一切工作才有可能,所以必須現(xiàn)在電腦上安裝好Lua開(kāi)發(fā)環(huán)境,之后program with Lua,我們先來(lái)熟悉下lua的語(yǔ)法吧。
    2015-04-04
  • 使用Lua編寫Web端模板引擎的實(shí)例代碼分享

    使用Lua編寫Web端模板引擎的實(shí)例代碼分享

    這里我們給出一個(gè)使用Lua編寫Web端模板引擎的實(shí)例代碼分享,力求簡(jiǎn)潔(核心代碼約為70行),僅實(shí)現(xiàn)最基本的模板功能:
    2016-06-06
  • 安裝Nginx+Lua開(kāi)發(fā)環(huán)境

    安裝Nginx+Lua開(kāi)發(fā)環(huán)境

    本文主要詳細(xì)介紹了安裝Nginx+Lua開(kāi)發(fā)環(huán)境的過(guò)程以及nginx+lua的配置,十分的詳盡,這里推薦給小伙伴們。
    2015-02-02
  • Lua實(shí)現(xiàn)split函數(shù)

    Lua實(shí)現(xiàn)split函數(shù)

    這篇文章主要介紹了Lua實(shí)現(xiàn)split函數(shù),lua中沒(méi)有split分割字條串函數(shù),本文使用自定義函數(shù)實(shí)現(xiàn),需要的朋友可以參考下
    2015-04-04
  • Lua進(jìn)階教程之閉包函數(shù)、元表實(shí)例介紹

    Lua進(jìn)階教程之閉包函數(shù)、元表實(shí)例介紹

    這篇文章主要介紹了Lua進(jìn)階教程之閉包函數(shù)、元表實(shí)例介紹,本文詳細(xì)講解了Lua的閉包函數(shù)和元表,并同時(shí)和C++做了比較,需要的朋友可以參考下
    2014-09-09
  • 利用Lua定制Redis命令的方法詳解

    利用Lua定制Redis命令的方法詳解

    這篇文章主要給大家介紹了關(guān)于利用Lua定制Redis命令的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • 最新評(píng)論

    临清市| 大关县| 正镶白旗| 清新县| 临邑县| 卢湾区| 大同市| 庐江县| 嘉义县| 临沧市| 启东市| 乡城县| 寻甸| 和田市| 龙江县| 高邮市| 荔浦县| 镇巴县| 家居| 墨玉县| 巴青县| 鹤山市| 泸州市| 济阳县| 贞丰县| 山阴县| 陇西县| 太仆寺旗| 朝阳区| 临邑县| 株洲市| 宣化县| 顺平县| 建阳市| 临澧县| 修武县| 界首市| 樟树市| 双鸭山市| 尉氏县| 鸡东县|