MC3330
22-03-2020, 09:33
Hallo,
ich fange gerade an, mich mit Luacode in Latex auseinanderzusetzen und habe eine Verständnisfrage. Ich habe eine Tabelle, die ich zufällig neu anordnen möchte. Dazu habe ich hier (https://gist.github.com/Uradamus/10323382) eine Funktion gefunden. Da klappt soweit auch gut, allerdings wird dabei die ursprüngliche Tabelle umsortiert. Ich würde es gerne hinbekommen, dass eine neu Tabelle erstellt wird.
In meinem MB ist shuffle1 die Funktion, die ich gefunden habe. Dabei wird die Tabelle t1 einfach zufällig umsortiert.
In shuffle2 habe ich versucht es so anzupassen, dass ich erst eine neue Tabelle erstelle und diese dann zufällig anordne und an die Tabelle t2 zurückgebe. Das klappt soweit auch, allerdings wird dabei auch die Tabelle t1 genau wie t2 umsortiert.
Ich vermute, dass der Befehl "local result = tbl" scheinbar keine einmalige absolute Zuordnung ist, sondern eine Art Verknüpfung zwischen den beiden Tabellen. Stimmt das so? Kann ich es irgendwie hinbekommen, dass ich die Tabelle "result" ändern kann, ohne dass es sich auf die Tabelle "tbl" auswirkt?
MB
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode}
\setlength\parindent{0pt}
\begin{document}
\begin{luacode}
function shuffle1(tbl)
for i = #tbl, 2, -1 do
local j = math.random(i)
tbl[i], tbl[j] = tbl[j], tbl[i]
end
end
function shuffle2(tbl)
local result = tbl
for i = #result, 2, -1 do
local j = math.random(i)
result[i], result[j] = result[j], result[i]
end
return result
end
\end{luacode}
\directlua{
t1={1,2,3}
}
Shuffle 1\\
Vor der Funktion shuffle1\\
t1: \directlua{tex.print(t1)}\\\\
\directlua{
shuffle1(t1)
}
Nach der Funktion shuffle1\\
t1: \directlua{tex.print(t1)}\\\\
Shuffle 2\\
\directlua{
t1={1,2,3}
}
Vor der Funktion shuffle2\\
t1: \directlua{tex.print(t1)}\\
t2: \directlua{tex.print(t2)}\\\\
\directlua{
t2 = shuffle2(t1)
}
Nach der Funktion shuffle2\\
%\tableshuffle
t1: \directlua{tex.print(t1)}\\
t2: \directlua{tex.print(t2)}\\
\end{document}
ich fange gerade an, mich mit Luacode in Latex auseinanderzusetzen und habe eine Verständnisfrage. Ich habe eine Tabelle, die ich zufällig neu anordnen möchte. Dazu habe ich hier (https://gist.github.com/Uradamus/10323382) eine Funktion gefunden. Da klappt soweit auch gut, allerdings wird dabei die ursprüngliche Tabelle umsortiert. Ich würde es gerne hinbekommen, dass eine neu Tabelle erstellt wird.
In meinem MB ist shuffle1 die Funktion, die ich gefunden habe. Dabei wird die Tabelle t1 einfach zufällig umsortiert.
In shuffle2 habe ich versucht es so anzupassen, dass ich erst eine neue Tabelle erstelle und diese dann zufällig anordne und an die Tabelle t2 zurückgebe. Das klappt soweit auch, allerdings wird dabei auch die Tabelle t1 genau wie t2 umsortiert.
Ich vermute, dass der Befehl "local result = tbl" scheinbar keine einmalige absolute Zuordnung ist, sondern eine Art Verknüpfung zwischen den beiden Tabellen. Stimmt das so? Kann ich es irgendwie hinbekommen, dass ich die Tabelle "result" ändern kann, ohne dass es sich auf die Tabelle "tbl" auswirkt?
MB
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode}
\setlength\parindent{0pt}
\begin{document}
\begin{luacode}
function shuffle1(tbl)
for i = #tbl, 2, -1 do
local j = math.random(i)
tbl[i], tbl[j] = tbl[j], tbl[i]
end
end
function shuffle2(tbl)
local result = tbl
for i = #result, 2, -1 do
local j = math.random(i)
result[i], result[j] = result[j], result[i]
end
return result
end
\end{luacode}
\directlua{
t1={1,2,3}
}
Shuffle 1\\
Vor der Funktion shuffle1\\
t1: \directlua{tex.print(t1)}\\\\
\directlua{
shuffle1(t1)
}
Nach der Funktion shuffle1\\
t1: \directlua{tex.print(t1)}\\\\
Shuffle 2\\
\directlua{
t1={1,2,3}
}
Vor der Funktion shuffle2\\
t1: \directlua{tex.print(t1)}\\
t2: \directlua{tex.print(t2)}\\\\
\directlua{
t2 = shuffle2(t1)
}
Nach der Funktion shuffle2\\
%\tableshuffle
t1: \directlua{tex.print(t1)}\\
t2: \directlua{tex.print(t2)}\\
\end{document}