Оглядывание и использование некоторых функций C# 3.0 мы можем сделать это:
foreach (KeyValuePair<string,int> item in keywordCounts.OrderBy(key=> key.Value))
{
// do something with item.Key and item.Value
}
Это - самый чистый способ, которым я видел, и подобно Ruby способ обработать хеши.
Во-первых, userdata означает полные userdata. Вот два решения для реализации CharArray. Пожалуйста, смотрите ниже:
//full userdata
extern "C" int newarray(lua_State* L)
{
int n = luaL_checkint(L, 1);
size_t nbytes = sizeof(CharArray) + (n - 1)*sizeof(char);
CharArray* a = (CharArray*)lua_newuserdata(L, nbytes);
a->size = n;
return 1;
}
//light userdata
extern "C" int newlarray(lua_State* L)
{
int n = luaL_checkint(L, 1);
size_t nbytes = sizeof(CharArray) + (n - 1)*sizeof(char);
CharArray* a = (CharArray*)(new char(nbytes));
lua_pushlightuserdata(L,a);
a->size = n;
return 1;
}
Полные пользовательские данные - это необработанная область памяти без предопределенных операций , которые предлагает Lua . Таким образом, пользовательские данные должны управляться сборщиком мусора. С другой стороны, легкие userdata - это просто значение, представляющее указатель C (то есть значение void *). Легкие пользовательские данные не должны управляться сборщиком мусора (и не являются им).