CougarFFW04 Posted January 27, 2019 Share Posted January 27, 2019 (edited) Hello, Je voudrais savoir s'il est possible d'appliquer un table.sort sur une liste ATME ? ++ Edit : Bon j'aurais du tester avant de demander... Bref réponse : OUI Edited January 27, 2019 by CougarFFW04 Link to comment Share on other sites More sharing options...
CougarFFW04 Posted January 27, 2019 Author Share Posted January 27, 2019 Doublons... Voir dessous Link to comment Share on other sites More sharing options...
CougarFFW04 Posted January 27, 2019 Author Share Posted January 27, 2019 (edited) Bon ben j'ai quand même une question... La fonction sortnested suivant permet d'ordonner une table par ordre croissant (ou décroissant) sur un l'index choisi. function sortnested(tabtab, order, indtosort) table.sort(tabtab, function (left, right) if order == "incr" then return left[indtosort] < right[indtosort] else return left[indtosort] > right[indtosort] end end) endTesté sur une table a la con et ca marche nickel. Par contre si je test sur une liste ATME, sauf erreur de ma part, ca n'a pas l'air de fonctionner... Sur ma table je fais un sort sur index 3 et ensuite j'affiche le premier de la liste mais apparement ca reste dans le même ordre... sortnested(blueTargetsListe, "incr", 3) ATME.displayForAll("SORTED "..blueTargetsListe:get(1)[3],3) Il y a une raison particulière ou simplement il est beaucoup trop tard pour que je puisse encore refléchir corrctement pour aujourd'hui :joystick: Edited January 27, 2019 by CougarFFW04 Link to comment Share on other sites More sharing options...
snowsniper Posted January 27, 2019 Share Posted January 27, 2019 (edited) bonsoir. si ta liste est une liste classique lua, ton script fonctionnera. si ta table est une liste indexée définie comme telle malist = ATME.C_IndexList() il faut faire autrement. elle vient de où cette table " blueTargetsListe" générée par une fonction ATME ? il est probable voir certain, que les tables générées en sortie par des fonctions ATME ayant cette sortie soient indexées. c'est à dire et c'est tout le principe de la table indexée: avec des index fixes même si la valeur a changé ou est nil extrait du manuel " Cette classe permet de créer une liste indexée pouvant contenir des valeurs nil. L’index sera forcément numérique et débutera à 1. ATME.C_IndexList permet une gestion optimisée de ces listes. Contrairement table.removequi engendre une modification des index suivant l’élément supprimé, ATME.C_IndexList met simplement à nil l’élément supprimé. Cette entrée devient alors valable pour la prochaine insertion. De plus, ceci évite de perdre un éventuel référencement au travers de l’index." --> l'interet est que ci l'on stocke à un index donné un objet ATME-DCS même si il devient nil l'index existe toujours sans décaler les autres . on peut donc tester si le group est détruit ou pas par exemple. usage de cette forme pour trier le meilleur moyen est de créer une nouvelle liste indexée selon des critères de tri. --première boucle for i,value in (matableindexée):pairs do -- deuxieme boucle for a,value2 in (matableindexée):pairs do if value2<value then ... -- critère de tri un exemple récent de ma part un peu complexe et obscur ( lourd et non optimisé mais qui fonctionne nickel ) dans mon module de monitoring des ground target, peut être ça aidera a comprendre comment on peut jouer avec les listes indexées souvent je crée une nouvelle table indexée de correspondance selon un tri donné, par exemple sur cette nouvelle table de correspondance , à l'index 1 de cette nouvelle liste j'ai stocké la valeur index 16 qui correspond ici à l'index des data avec la plus petite valeur de distance par rapport au joueur dans les datas stockée,( je les associe à une liste data standard lua non indexée lorsque j'ai trop de datas, ...et par facilité d'accès.) --____________________________________ local function tri(parcategory,active) --/ true or false or nil / true false nil local newtri1_distance = ATME.C_IndexList() local newtri2_parameteractive = ATME.C_IndexList() local newtri3_parametercategory = ATME.C_IndexList() local categorytable = {} local listcategory = ATME.C_IndexList() local dist = 100000 local dist2 = 0 local b = ATME.modules["DATA_target"].TARGETindexlist:getCount() thisModule:output("nb objet dans la table TARGETindexlist "..b,1) local indexclosest = "" --make new list for newtri1_distance ( fait par default) for i=1,b do dist = 100000 --research closest for _i,_items in ATME.modules["DATA_target"].TARGETindexlist:pairs() do if ATME.modules["DATA_target"].TARGETdata[_i]["dist"] <= dist and ATME.modules["DATA_target"].TARGETdata[_i]["dist"]> dist2 then dist = ATME.modules["DATA_target"].TARGETdata[_i]["dist"] indexclosest = _i end end thisModule:output(" iteration "..i,1) dist2 = dist newtri1_distance:add(indexclosest) thisModule:output(" added in newtri1 distance "..indexclosest,1) end --newtri2_parameter1 ( fait par defaut ) if active == nil then newtri2_parameteractive = newtri1_distance elseif active == true or active == false then for _i,index in newtri1_distance:pairs() do if ATME.modules["DATA_target"].TARGETdata[index]["status"] == active then newtri2_parameteractive:add(index) thisModule:output("added in newtri2 "..index.."because "..(ATME.modules["DATA_target"].TARGETdata[index]["objectname"]).." status is "..tostring(active),1) end end end --newtri3_parametercategory --get category table for _i,index in newtri2_parameteractive:pairs() do if categorytable[(ATME.modules["DATA_target"].TARGETdata[index]["menucategory"])] == nil then categorytable[(ATME.modules["DATA_target"].TARGETdata[index]["menucategory"])] = ATME.C_IndexList() listcategory:add((ATME.modules["DATA_target"].TARGETdata[index]["menucategory"])) categorytable[(ATME.modules["DATA_target"].TARGETdata[index]["menucategory"])]:add(index) thisModule:output("added in newtri3 "..index.."because "..(ATME.modules["DATA_target"].TARGETdata[index]["objectname"]).." menucategory is "..(ATME.modules["DATA_target"].TARGETdata[index]["menucategory"]),1) else categorytable[(ATME.modules["DATA_target"].TARGETdata[index]["menucategory"])]:add(index) thisModule:output("added in newtri3 "..index.."because "..(ATME.modules["DATA_target"].TARGETdata[index]["objectname"]).." menucategory is "..(ATME.modules["DATA_target"].TARGETdata[index]["menucategory"]),1) end end for i,category in listcategory:pairs() do thisModule:output(" functiontri in listcategory "..i.." "..category,1) end if type(parcategory) == string and categorytable[parcategory] ~= nil then newtri3_parametercategory = categorytable[parcategory] else newtri3_parametercategory = newtri2_parameteractive end for i,index in newtri3_parametercategory:pairs() do --thisModule:output("functiontri in final table return only "..i.." "..index ,1) thisModule:output("corresponding with "..(ATME.modules["DATA_target"].TARGETdata[index]["objectname"]).." "..(ATME.modules["DATA_target"].TARGETdata[index]["classnameofobject"]).." "..(ATME.modules["DATA_target"].TARGETdata[index]["menucategory"]),1) end return newtri3_parametercategory,listcategory,categorytable end Edited January 27, 2019 by snowsniper i7-10700KF CPU 3.80GHz - 32 GO Ram - - nVidia RTX 2070 - SSD Samsung EVO with LG TV screen 40" in 3840x2150 - cockpit scale 1:1 - MS FFB2 Joystick - COUGAR F16 throttle - Saitek Pro Flight Rudder Pedals Link to comment Share on other sites More sharing options...
CougarFFW04 Posted January 27, 2019 Author Share Posted January 27, 2019 Salut snowsniper, ha oui j'avais pas capté ca.... donc normal que ca ne trie pas... Ca va me compliquer pas mal la vie cette affaire... Je vais peut-etre repasser a une table Lua classique dans ce cas la. Merci quand même pour les conseils :thumbup: Link to comment Share on other sites More sharing options...
snowsniper Posted January 27, 2019 Share Posted January 27, 2019 la table indexée reste idéale pour du référencement identique et fiable d'objet, référencement utilisé ensuite dans plusieurs tables classiques ou pas; à toi de voir mais rien de très compliqué une fois qu'on a compris i7-10700KF CPU 3.80GHz - 32 GO Ram - - nVidia RTX 2070 - SSD Samsung EVO with LG TV screen 40" in 3840x2150 - cockpit scale 1:1 - MS FFB2 Joystick - COUGAR F16 throttle - Saitek Pro Flight Rudder Pedals Link to comment Share on other sites More sharing options...
CougarFFW04 Posted January 27, 2019 Author Share Posted January 27, 2019 Hello, Oui j'ai réglé ca en trois lignes de code for _i, _item in blueTargetsListe:pairs() do table.insert(temptab,_item) end sortnested(temptab, "incr", 3) :pilotfly: Link to comment Share on other sites More sharing options...
sunski34 Posted January 28, 2019 Share Posted January 28, 2019 Oui, la classe C_IndexList permet de gérer de s'assurer qu'un index ne change pas. Exemple : Si après un insert, l'index de l'objet est 3, si l'objet 2 est supprimé, l'index restera 3 et l'index 2 est libre pour une utilisation ultérieure. Elle permet donc ainsi que gérer des listes indexées dont l'index est fixe même après une suppression tout en pouvant réassigner les "trous" dans la liste lors d'un prochain insert. Cette classe de par sa conception n'a pas besoin de fonction de tri. Pour trier, il faut effectivement copier dans une autre table et trié en fonction du contenu. A+ Link to comment Share on other sites More sharing options...
Recommended Posts