/ / Sortierung in Lua, Anzahl der Artikel zählen - Sortierung, Lua

Sortierung in Lua, Anzahl der Artikel zählen - sortieren, lua

Zwei kurze Fragen (ich hoffe ...) mit dem folgenden Code. Das folgende Skript prüft, ob eine Zahl eine Primzahl ist, und wenn nicht, werden alle Faktoren für diese Zahl zurückgegeben. Andernfalls wird nur die Primzahl zurückgegeben. Achten Sie nicht auf die zs. Zeug im Skript, denn das ist mandantenabhängig und hat keinen Einfluss auf die Skriptfunktionalität.

Das Skript selbst funktioniert fast wunderbar,abgesehen von zwei kleinen Details - die erste ist die Faktorenliste, die sich nicht selbst sortiert anzeigt ... das heißt, für 24 wird 1, 2, 12, 3, 8, 4, 6 und 24 anstelle von 1 zurückgegeben , 2, 3, 4, 6, 8, 12 und 24. Ich kann es nicht als Tabelle drucken, es muss also als Liste zurückgegeben werden. Wenn es zuerst als Tabelle sortiert werden muss, dann DANN in eine Liste, ich kann damit umgehen. Alles, was zählt, ist das Endergebnis, das die Liste ist.

Das andere Detail ist, dass ich überprüfen muss, ob es dort istsind nur zwei Zahlen in der Liste oder mehr. Wenn es nur zwei Zahlen gibt, ist dies eine Primzahl (1 und die Zahl). Die aktuelle Art, wie ich sie habe, funktioniert nicht. Gibt es eine Möglichkeit, dies zu erreichen? Ich schätze die ganze Hilfe!

function get_all_factors(number)
local factors = 1
for possible_factor=2, math.sqrt(number), 1 do
local remainder = number%possible_factor

if remainder == 0 then
local factor, factor_pair = possible_factor, number/possible_factor
factors = factors .. ", " .. factor
if factor ~= factor_pair then
factors = factors .. ", " ..  factor_pair
end
end
end

factors = factors .. ", and " .. number
return factors
end

local allfactors = get_all_factors(zs.param(1))
if zs.func.numitems(allfactors)==2 then
return zs.param(1) .. " is prime."
else
return zs.param(1) .. " is not prime, and its factors are: " .. allfactors
end

Antworten:

3 für die Antwort № 1

Wenn ich dein Problem richtig verstanden habe, habe ichempfehlen, die Logik etwas aufzuteilen. Die Idee wäre, zuerst eine Tabelle zu erstellen, die die Brüche enthält, und dann die Sortierung vorzunehmen und danach die Zeichenfolgendarstellung zu erstellen.

- Erzeugt eine Tabelle mit allen Faktoren füreine Zahl. Funktion createFactors (n) lokale Faktoren = {} - Die for-Schleife wäre hier. Wenn Sie einen Faktor finden, fügen Sie hinzu - es in der Tabelle. - ... table.insert (Faktoren, n) - ... - # Wenn Sie alle Faktoren gefunden haben, geben Sie einfach die Tabelle zurück. Rückkehrfaktoren Ende  - Lua bietet eine Methode zum Sortieren von Tabellen mit dem Namen table.sort an. lokale Faktoren = createFactors (139) table.sort (Faktoren)  - Es gibt eine Methode zum Erstellen einer Zeichenfolgendarstellung einer Tabelle - genannt table.concat, ist der erste Parameter die Tabelle und der zweite Parameter - ist das Zeichen, mit dem die Werte abgegrenzt werden. table.concat (Faktoren, ",")

2 für die Antwort № 2

Nizza ansewr von Ponzao. Um dem Ergebnis den letzten Schliff zu geben, verwenden Sie hier eine allgemeine Routine, um eine Liste von Strings in Lua in einen englischen String mit "und" umzuwandeln, der die Liste darstellt:

function string.commafy(t, andword)
andword = andword or "and"
local n = #t
if n == 1 then
return t[1]
elseif n == 2 then
return table.concat { t[1], " ", andword, " ", t[2] }
else
local last = t[n]
t[n] = andword .. " " .. t[n]
local answer = table.concat(t, ", ")
t[n] = last
return answer
end
end

Anstatt von table.concat(factors, ", ") benutzen string.commafy(factors).