JeuWeb - Crée ton jeu par navigateur
[All/Scala] Trier de coordonnées dans un tableau à deux dimensions - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [All/Scala] Trier de coordonnées dans un tableau à deux dimensions (/showthread.php?tid=6274)

Pages : 1 2 3 4


[All/Scala] Trier de coordonnées dans un tableau à deux dimensions - srm - 26-07-2012




RE: [All/Scala] Trier de coordonnées dans un tableau à deux dimensions - niahoo - 26-07-2012

Ton code et "Typiquement en PHP de faire $tableXY[4][6] retournerait Square(4, 6, "oxman")" ne sont pas cohérents. si on suit ton code ça retourne une liste de Squares, pas un square, je me trompe ?

Oui j'ai maté le code avant de chercher ...

Bon j'ai la felmme de trouver une solution sympa maintenant quj'ai ta réponse. la prochaine fois, ne la donne pas de suite :p


RE: [All/Scala] Trier de coordonnées dans un tableau à deux dimensions - srm - 26-07-2012

Oui une liste de square, car il peut y en avoir plusieurs, tu as raison Wink
J'ai dit pas de cliquer avant de chercher, à toi de te maitriser c'est tout.

Tu peux toujours trouver la solution la plus sympa dans ton propre langage et ensuite la comparer Smile


RE: [All/Scala] Trier de coordonnées dans un tableau à deux dimensions - niahoo - 26-07-2012

Hum bon comme d'hab ici je fais du erlang sur des problèmes posés par des langages ipératifs .. donc c'est moche.

Code :
-module(xy).
-export([tableXY/0,test/0]).

-record(square, {x, y , user}).



tableXY () ->
    Squares = [
        #square{x=1,y=1,user="niahoo"},
        #square{x=2,y=5,user="oxman"},
        #square{x=3,y=6,user="niahoo"},
        #square{x=4,y=5,user="oxman"},
        #square{x=5,y=6,user="niahoo"},
        #square{x=2,y=5,user="oxman"},
        #square{x=3,y=3,user="oxman"},
        #square{x=1,y=1,user="oxman"},
        #square{x=1,y=2,user="niahoo"}
    ],
    lists:foldl(fun(I,Acc) -> dict:append({I#square.x,I#square.y},I,Acc) end, dict:new(),Squares).


test() ->
    TableXY = tableXY(),
    case dict:find({1,1}, TableXY)
      of {ok, Value} -> Value
       ; error -> []
    end.



RE: [All/Scala] Trier de coordonnées dans un tableau à deux dimensions - srm - 26-07-2012

Tu peux expliquer ton code ?


RE: [All/Scala] Trier de coordonnées dans un tableau à deux dimensions - niahoo - 27-07-2012

Bon ben je définis un record 'square' qui est une structure de données aux propriétés 'x', 'y' et 'user'.

tableXY() renvoie ce que tu demandes, ici j'utilises un dictinnaire pour stocker mes valeurs(1).

Pour faire ce que tu as demandé, j'utilise un pli sur ma liste de squares afin de ranger dans un dictionnaire mes squares selon leurs coordonnées.

je prends un dictionnaire vide (dict:new()), je le balance dans mon pli sur la liste Squares avec une lambda (fun(...) -> ... end) qui ajoute le square courant à la liste représentée par la clé {X,Y} de mon dict, X et Y étant récupérées via l'interface d'accès à mon record (e.g. I#square.x).

Ensuite, ma fonction test renvoie la liste de squares présents au point {1,1}. la structure "case of" est là parce que mon dict renvoie error si la clé demandée n'est pas présente (auquel cas je renvoie une liste vide : aucun square à ces coordonnées).





(1) Mais en temps normal on rendrait opaque cette structure de données en fournissant une interface et les fonctions qui vont bien afin que l'utilisateur du code n'aie pas à savoir ni comment est représenté un 'square', ni comment ils sont stockés au sein de notre application.
Là seule chose qu'il veut c'est récupérer tous les squares au sein d'un même point {x, y}.


RE: [All/Scala] Trier de coordonnées dans un tableau à deux dimensions - srm - 27-07-2012

Ok merci


RE: [All/Scala] Trier de coordonnées dans un tableau à deux dimensions - srm - 27-07-2012

Par contre je crois que tu as mal répondu à la problématique, si je fais :
squareXY(4) ça me donne : List(Square(4, 7, "Sephi-Chan"), Square(4, 4, "oxman"))
J'ai l'impression que ton code oblige à interroger avec X ET Y et on ne peut pas seulement interroger avec X.


RE: [All/Scala] Trier de coordonnées dans un tableau à deux dimensions - niahoo - 27-07-2012

Oui bien sur car tu ne l'avais pas demandé. Tu demandes un accès par XY. Ce serait stupide de calquer directement des techniques de language impératif. Je pense que cette technique serait bien plus performant que des listes de Y dans des listes de X.

Donne moi un problème et je te donnerai une solution si possible mais ne me demandes pas de faire un foreach dans ce langage, ce serait stupide


RE: [All/Scala] Trier de coordonnées dans un tableau à deux dimensions - srm - 27-07-2012

Non j'ai demandé un tableau à deux dimensions pour pouvoir accéder que par X ou par X et Y, j'ai donné ensuite un exemple sur un appel en X et Y Smile

Je n'ai en aucun cas demandé un foreach, j'ai soulevé un problème et après vous le réglez comme vous voulez Smile