让我们说我在Lua中有一个字典(即一个包含string类型索引的Lua表),如下所示:
local my_dictionary = {a = 123; b = 321; c = 456; d = 654};
我要做的是创建一个迭代器函数,即使其索引的类型为字符串,也可以遍历表。有点像对,但每当我尝试调用next()来获取下一个索引时,值只会返回索引,如果索引的类型为int,则返回值。我的想法可能是调用(索引):byte(1,-1)并将int组成元组,并将其用作一种伪装索引,只是为了跟踪索引,但我不认为这将适用于下一个。这基本上是我到目前为止所做的:
local function each(list)
if #list > 0 then
local function my_itr(lst, ind)
return next(lst, ind);
end
return my_itr, List, 0;
end
return function() end, nil, nil;
end
这只适用于带有int索引(数组表)的表,所以我想知道是否有人可以帮助我。 谢谢。 编辑:为了使这里不那么模糊,这是我要完成的一段代码示例:
local mytable = {a = 123; b = 321; 3, 2, 1, c = "bca"};
for i,v in each(mytable) do
print(i,v);
end
它应该输出什么:
>a 123
>b 321
>1 3
>2 2
>3 1
>c bca
输出不必按照确切的顺序排列。
答案 0 :(得分:2)
您可以使用git push origin master
来实现此行为。不要将它与ssh
混淆 - 这是两个不同的表遍历函数!
虽然ssh ec2
仅遍历表的整数键(通常它也会在第一个不存在的整数键处停止),但pairs
遍历所有键值对桌子。
所以,写作
ipairs
您将以某种随机顺序打印所有键值对。这是demo。
作为旁注,没有'词典'在Lua中 - 所有关联数组都被称为'表'。
答案 1 :(得分:2)
通过一些调整,它应该完全符合您的要求:修复import matplotlib.pyplot as plt
import numpy as np
x1 = [1,2,3,4,5,6,7,8,9,10]
x2 = [7,3,2,4,1,4,3,5,8,4]
y = [0,1,1,0,1,0,0,1,0,1]
plt.scatter(x1,x2,c=y, cmap="viridis")
yunique = np.unique(y).astype(float)
handles = list(map(lambda i: plt.plot([],
color=plt.cm.viridis(i),marker="o", ls="")[0], yunique))
labels = list(map(str, yunique.astype(bool)))
plt.legend(handles=handles, labels=labels)
plt.show()
中的拼写错误并传递List
而不是nil
:
0
这将为我打印以下内容,这是您需要的:
local function each(list)
local function my_itr(lst, ind)
return next(lst, ind)
end
return my_itr, list, nil
end
local mytable = {a = 123; b = 321; 3, 2, 1, c = "bca"}
for i,v in each(mytable) do
print(i,v)
end