向表格(Lua中的数组)添加元素出问题了。

我试图创建一个表格作为用户的小型数据库:

users = {}

function create_new_user()
    print("输入一个独特的用户名(最多12个字母):")
    local name = io.read()
    if #name > 12 then
        print"那个名字太长了。)
        return create_new_user()
    elseif users [name] then
        print("该名称已在使用中。)
        return create_new_user()
    其他
        table.insert(users,1,name)
        print(“您的新用户名是:”,users [name])
    end
end

我从手册中了解到行

table.insert(users, 1, name)

会将名称的字符串值插入到用户数组的元素中。事实并非如此-每当我运行脚本时,我得到以下输出:

您的新用户名是:nil
点赞
用户1442917
用户1442917

你插入了一个元素到表中,但是你试图通过 name 的值来检索值,这不是你存储的内容(你正在使用 users[name] 而不是 users[1])。你可以尝试像这样做:

table.insert(users, name)
print ("你的新用户名是:", name)

请注意,table.insert(users, 1, name) 可能无法按照你的期望工作,因为这会在表的 前面 插入元素。如果你以这种方式插入 "abc""def",那么 users 表将包括元素 {"def", "abc"}(按照这个特定的顺序)。要检索最后插入的元素,你可以使用 users[1]

如果你想以不同的顺序存储值,你需要使用 table.insert(users, name),它将在表的 末尾 插入元素。要检索最后一个元素,你可以使用 users[#users]

如果你总是想将添加的元素存储在表的第一个位置,你可以简单地使用 users[1] = name

2014-08-12 19:57:07
用户501459
用户501459

在这里,你使用字符串(用户名)对用户表进行索引:

 elseif users[name] then

在这里,你也是这样做的:

 print("Your new user name is: ", users[name])

但是,你使用一个数字索引来 存储 名称:

 table.insert(users, 1, name)

你想要的是替换这行代码:

users[name] = name

或者这个(需要更改后面的行):

users[name] = true

思路是你只真正使用键来创建一个查找表。

2014-08-12 20:52:42