ToLua的Example示例学习笔记09_Dictionary

2020-05-11  本文已影响0人  凌枫望星月

展示了Lua对C#中的Dictionary对象的几种基本访问方法。

1」代码

操作代码如下:

            function TestDict(map)                        
                local iter = map:GetEnumerator() 
                
                while iter:MoveNext() do
                    local k = iter.Current.Key
                    local v = iter.Current.Value
                    print('Key:'..k..', id: '..v.id ..' name: '..v.name..' sex: '..v.sex)                                
                end

                local flag, account = map:TryGetValue(1, nil)

                if flag then
                    print('TryGetValue result ok: '..account.name)
                end

                local keys = map.Keys
                iter = keys:GetEnumerator()
                print('------------print dictionary keys---------------')
                while iter:MoveNext() do
                    print(iter.Current)
                end
                print('----------------------over----------------------')

                local values = map.Values
                iter = values:GetEnumerator()
                print('------------print dictionary values---------------')
                while iter:MoveNext() do
                    print(iter.Current.name)
                end
                print('----------------------over----------------------')                

                print('kick '..map[2].name)
                map:Remove(2)
                iter = map:GetEnumerator() 

                while iter:MoveNext() do
                    local v = iter.Current.Value
                    print('id: '..v.id ..' name: '..v.name..' sex: '..v.sex)                                
                end
            end  

c#代码如下:

public sealed class TestAccount
{
    public int id;
    public string name;
    public int sex;

    public TestAccount(int id, string name, int sex)
    {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }
}
        new LuaResLoader();
        map.Add(1, new TestAccount(1, "水水", 0));
        map.Add(2, new TestAccount(2, "王伟", 1));
        map.Add(3, new TestAccount(3, "王芳", 0));

        LuaState luaState = new LuaState();
        luaState.Start();
        BindMap(luaState);

        luaState.DoString(script, "UseDictionary.cs");
        LuaFunction func = luaState.GetFunction("TestDict");
        func.BeginPCall();
        func.Push(map);
        func.PCall();
        func.EndPCall();

        func.Dispose();
        func = null;
        luaState.CheckTop();
        luaState.Dispose();
        luaState = null;

2」需要了解的部分

             while iter:MoveNext() do
                   local k = iter.Current.Key
                   local v = iter.Current.Value
                   print('Key:'..k..', id: '..v.id ..' name: '..v.name..' sex: '..v.sex)                                
               end
字典函数:
Dictionary:get_Item()  --获取与指定的键相关联的值
Dictionary:set_Item()  --设置与指定的键相关联的值
Dictionary:Add()      --将指定的键和值添加到字典中
Dictionary:Clear()    --从 Dictionary中移除所有的键和值
Dictionary:ContainsKey()     --确定 Dictionary是否包含指定的键
Dictionary:ContainsValue()   --确定 Dictionary是否包含特定值
Dictionary:GetObjectData()
Dictionary:OnDeserialization()
Dictionary:Remove() --从 Dictionary中移除所指定的键的值
Dictionary:TryGetValue() --获取与指定的键相关联的值
Dictionary:GetEnumerator() --返回循环访问 Dictionary的枚举数
Dictionary:New() --这个是创建一个字典的方法
Dictionary.this --对象的this引用
Dictionary.__tostring --返回表示当前 Object的 String,这里其实并非C#对象的那个Tostring().而是作者自己重新等装的,但是效果类似,不用纠结,
                      --只不过不是方法而是对象了
Dictionary.Count     --获取包含在 Dictionary中的键/值对的数
Dictionary.Comparer  --获取用于确定字典中的键是否相
Dictionary.Keys     --获取包含 Dictionary中的键的集合
Dictionary.Values   --获取包含 Dictionary中的值的集合
上一篇下一篇

猜你喜欢

热点阅读