Как перевести lua в c# такой массив?
Зравствуйте, есть код на LUA:
NodesTable = {
["Node1"] = true,
["Node2"] = true,
["Node3"] = true,
["Node4"] = true
}
TNodesTable = {
["LNode1"] = true,
["LNode2"] = true,
}
Extracted = {}
if NodesTable[NodeName] then
if TNodesTable[NodeName] then
destPolo = "localGUID" // пример
if not Extracted[sourceDATA] then
Extracted[sourceDATA] = { [NodeName] ={}, [destDATA] = { [NodeName] = { name = sourceName, destPolo = destDATAkey, destName = destName, time_parsed = time_parsed, amount = {} }}}
elseif not Extracted[sourceDATA][destDATA] then
Extracted[sourceDATA][destDATA] = { [NodeName] = { name = sourceName, destPolo = destDATAkey, destName = destName, time_parsed = time_parsed, amount = {} }}
Extracted[sourceDATA][NodeName] ={}
elseif not Extracted[sourceDATA][destDATA][NodeName] then
Extracted[sourceDATA][destDATA][NodeName] = { name = sourceName, destPolo = destDATAkey, destName = destName, time_parsed = time_parsed, amount = {} }
Extracted[sourceDATA][NodeName] ={}
end
end
end
if Extracted[sourceDATA][NodeName].lastPing
and (Extracted[sourceDATA][NodeName].lastPing ~= curtime
or TNodesTable[NodeName])
then
Extracted[sourceDATA][NodeName].lastPing = curtime
Extracted[sourceDATA][destDATA][NodeName].amount[#Extracted[sourceDATA][destDATA][NodeName].amount+1] = sended
local total = 0
local average = 0
local hits = #Extracted[sourceDATA][destDATA][NodeName].amount
for i = 1, hits do
local amount = Extracted[sourceDATA][destDATA][NodeName].amount[i]
total = total + amount
end
average = (total/hits)
Extracted[sourceDATA][destDATA][NodeName].average = average
end
sourceDATA - ulong
destDATA - ulong
NodeName - string
name - string
destPolo - ulong
destName - string
time_parsed - double
lastPing - double
sended - double
average - double
amount - double,
amount это массив из цифр amount[i], из которых вычисляется среднее значение average
Мне нужно это "чудо" написать на c#, я могу создать модель для данных типа key - value
public class NodeStruct
{
public string name { get; set; }
public ulong destKey { get; set; }
public string destName { get; set; }
public double time_parsed { get; set; }
}
но что делать с amount я не знаю, т.е. я не понимаю как сделать такой словарь, где по мимо key - value должен быть еще в качестве поля Dictionary. Долго пытался понять как создать такой словарь Extracted, прошу Вашей помощи На ум приходит только пока что такое существо Франкенштейна:
public class NodeStruct
{
public string name { get; set; }
public ulong destKey { get; set; }
public string destName { get; set; }
public double time_parsed { get; set; }
Array amount { get; set; }
}
upd Не уверен что так будет правильно:
public class NodeStruct4
{
public string name { get; set; }
public ulong destKey { get; set; }
public string destName { get; set; }
public double time_parsed { get; set; }
public int[] amount { get; set; }
}
public class NodeStruct3
{
public Dictionary<uint, NodeStruct4> NodeName { get; set; }
}
public class NodeStruct2
{
public double lastPing { get; set; }
}
public class NodeStruct1
{
public Dictionary<ulong, NodeStruct3> destDATA { get; set; }
public Dictionary<uint, NodeStruct2> NodeName { get; set; }
//public ulong destDATA { get; set; }
//public uint destDATA { get; set; }
}
public static Dictionary<ulong, NodeStruct1> Extracted = new();
Кажется что-то получилось:
LUA Extracted[12345][111].lastPing = 1
C# Extracted[12345].NodeName[111].lastPing = 1;
LUA Extracted[12345][54321][111].amount[#Extracted[sourceDATA][destDATA][NodeName].amount+1] = 222222
C# Extracted[12345].destDATA[54321].NodeName[111].amount.Append(222222);
добавление в 1 действие:
Extracted.Add(12345, new NodeStruct1
{
NodeName = new Dictionary<uint, NodeStruct2> {{
111, new NodeStruct2
{
lastPing = 1
}
}},
destDATA = new Dictionary<ulong, NodeStruct3>
{{
54321, new NodeStruct3
{
NodeName = new Dictionary<uint, NodeStruct4>
{{
111, new NodeStruct4
{
amount = new int[] { 222222 }
}
}}
}
}}
});
Поправьте, если есть вариант лучше