lua array2d 检查值是否存在
lua array2d check value if exist
我真的需要帮助。我仍然无法弄清楚我的逻辑 lua 有关如何在事件已经具有值时使用 if 条件阻止该事件的代码?
这是我的 array2d :
mydata = {
{"mike", "30", "1"},
{"michael", "40", "2"},
{"mike", "40", "2"},
{"michael", "50", "3"},
{"frost", "50", "3"},
{"nick", "60", "4"}
}
实际上,我的计划是获取正确的代码来检查索引名称 mydata[..][1]
和点索引 mydata[..][3]
。
这是一个案例解释:
所以如果索引名称Michael
和点索引3
不存在或如果只有名字michael
存在但是它没有点索引3
,那么它会写michael:50:3
在data.txt。 但 如果名称和点索引已经存在。然后,它会阻塞并打印("sorry your name and score index already exist")
我的代码:
mydata = {{"mike", "30", "1"},
{"michael", "40", "2"},
{"mike", "40", "2"},
{"michael", "50", "3"},
{"frost", "50", "3"},
{"nick", "60", "4"}}
function check_point1(tab, val1) -- Function for checking name
for index, value in ipairs (tab) do
if value[1] == val1 then
return true
end
end
return false
end
function check_point2(tab, val1) -- Function for checking player point after name
for index, value in ipairs (tab) do
if value[3] == val1 then
return true
end
end
return false
end
-- this is example case
-- these below are variable to process checking if it's exist
name = "michael"
id = "3"
-- this is my checking code, idk it's good or not. or maybe it's wrong code. because it's not working
if check_point1(mydata, name) then
if check_point2(mydata, id) then
print(your name and point index are exist. sorry you can't earn this point")
else
print(only your name exist. let us save your new point now")
end
else
print("your name and point index is not exist. let us save your name and point now")
local file = io.open("data.txt", "r")
file:write("michael:50:3")
file:close()
end
阻止事件 "write michael:50:3
" 已经存在的最佳方法是什么?在帮助我之前,如果您需要了解一些事情,请告诉我。我在 lua.
方面仍然很差
我们可以将其分解为一个通用的比较函数,该函数在一组记录中搜索与提供的记录(部分或全部)匹配的存储记录。
我们必须定义的第一个函数是一个辅助函数,contains_all
,它接受一个 target
记录和一个 query
记录,并测试是否target
至少包含 query
所做的一切。
local function contains_all (target, query)
for key, value in pairs(query) do
if target[key] ~= value then
return false
end
end
return true
end
然后我们可以轻松实现我们的搜索功能,搜索 组 记录,并根据相同的 query
记录检查每条记录。我们称此函数为 find_by
是因为如果它找到匹配的记录,我们 return 该记录及其所在的索引。
local function find_by (set, query)
for i = 1, #set do
if contains_all(set[i], query) then
return set[i], i
end
end
end
现在我们可以简单地使用这些来查明 mydata
是否包含匹配或部分匹配我们选择的 query
记录的记录。
local mydata = {
{"mike", "30", "1" },
{ "michael", "40", "2" },
{ "mike", "40", "2" },
{ "michael", "50", "3" },
{ "frost", "50", "3" },
{ "nick", "60", "4" }
}
print(find_by(mydata, { [1] = "michael", [3] = "3" })) --> table: 0x217d890 4
由于我们存储的记录是序列,我们使用显式括号表示法来设置我们的索引,在这种情况下跳过第二个索引。
因为这个函数return在匹配的情况下是table,在不匹配的情况下是nil
,我们现在有一个安全的布尔constrast; tables 是真值,nil
是假值。
if find_by(mydata, { [1] = "michael", [3] = "3" }) then
print('Entry exists')
end
返回记录使我们更容易进行进一步检查,而无需再次查询每条记录。
local found = find_by(mydata, { "michael" })
if found then
if found[3] == "3" then
print('Entry exists.')
else
print('Only name exists.')
end
else
print('Entry does not exist')
end
我真的需要帮助。我仍然无法弄清楚我的逻辑 lua 有关如何在事件已经具有值时使用 if 条件阻止该事件的代码?
这是我的 array2d :
mydata = {
{"mike", "30", "1"},
{"michael", "40", "2"},
{"mike", "40", "2"},
{"michael", "50", "3"},
{"frost", "50", "3"},
{"nick", "60", "4"}
}
实际上,我的计划是获取正确的代码来检查索引名称 mydata[..][1]
和点索引 mydata[..][3]
。
这是一个案例解释:
所以如果索引名称Michael
和点索引3
不存在或如果只有名字michael
存在但是它没有点索引3
,那么它会写michael:50:3
在data.txt。 但 如果名称和点索引已经存在。然后,它会阻塞并打印("sorry your name and score index already exist")
我的代码:
mydata = {{"mike", "30", "1"},
{"michael", "40", "2"},
{"mike", "40", "2"},
{"michael", "50", "3"},
{"frost", "50", "3"},
{"nick", "60", "4"}}
function check_point1(tab, val1) -- Function for checking name
for index, value in ipairs (tab) do
if value[1] == val1 then
return true
end
end
return false
end
function check_point2(tab, val1) -- Function for checking player point after name
for index, value in ipairs (tab) do
if value[3] == val1 then
return true
end
end
return false
end
-- this is example case
-- these below are variable to process checking if it's exist
name = "michael"
id = "3"
-- this is my checking code, idk it's good or not. or maybe it's wrong code. because it's not working
if check_point1(mydata, name) then
if check_point2(mydata, id) then
print(your name and point index are exist. sorry you can't earn this point")
else
print(only your name exist. let us save your new point now")
end
else
print("your name and point index is not exist. let us save your name and point now")
local file = io.open("data.txt", "r")
file:write("michael:50:3")
file:close()
end
阻止事件 "write michael:50:3
" 已经存在的最佳方法是什么?在帮助我之前,如果您需要了解一些事情,请告诉我。我在 lua.
我们可以将其分解为一个通用的比较函数,该函数在一组记录中搜索与提供的记录(部分或全部)匹配的存储记录。
我们必须定义的第一个函数是一个辅助函数,contains_all
,它接受一个 target
记录和一个 query
记录,并测试是否target
至少包含 query
所做的一切。
local function contains_all (target, query)
for key, value in pairs(query) do
if target[key] ~= value then
return false
end
end
return true
end
然后我们可以轻松实现我们的搜索功能,搜索 组 记录,并根据相同的 query
记录检查每条记录。我们称此函数为 find_by
是因为如果它找到匹配的记录,我们 return 该记录及其所在的索引。
local function find_by (set, query)
for i = 1, #set do
if contains_all(set[i], query) then
return set[i], i
end
end
end
现在我们可以简单地使用这些来查明 mydata
是否包含匹配或部分匹配我们选择的 query
记录的记录。
local mydata = {
{"mike", "30", "1" },
{ "michael", "40", "2" },
{ "mike", "40", "2" },
{ "michael", "50", "3" },
{ "frost", "50", "3" },
{ "nick", "60", "4" }
}
print(find_by(mydata, { [1] = "michael", [3] = "3" })) --> table: 0x217d890 4
由于我们存储的记录是序列,我们使用显式括号表示法来设置我们的索引,在这种情况下跳过第二个索引。
因为这个函数return在匹配的情况下是table,在不匹配的情况下是nil
,我们现在有一个安全的布尔constrast; tables 是真值,nil
是假值。
if find_by(mydata, { [1] = "michael", [3] = "3" }) then
print('Entry exists')
end
返回记录使我们更容易进行进一步检查,而无需再次查询每条记录。
local found = find_by(mydata, { "michael" })
if found then
if found[3] == "3" then
print('Entry exists.')
else
print('Only name exists.')
end
else
print('Entry does not exist')
end