blob: 089e066cfa7917bc7d1b2a2d9a1a8c4c4be27d0d (
plain) (
tree)
|
|
#lang racket
; (require sugar)
(define test-data '#hash(("id" . 12)
("name" . "butterfree")
("sprite" . "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/12.png")
("stats"
. (#hasheq((base_stat . 60)
(effort . 0)
(stat . #hasheq((name . "hp") (url . "https://pokeapi.co/api/v2/stat/1/"))))
#hasheq((base_stat . 45)
(effort . 0)
(stat . #hasheq((name . "attack") (url . "https://pokeapi.co/api/v2/stat/2/"))))
#hasheq((base_stat . 50)
(effort . 0)
(stat . #hasheq((name . "defense") (url . "https://pokeapi.co/api/v2/stat/3/"))))
#hasheq((base_stat . 90)
(effort . 2)
(stat . #hasheq((name . "special-attack") (url . "https://pokeapi.co/api/v2/stat/4/"))))
#hasheq((base_stat . 80)
(effort . 1)
(stat . #hasheq((name . "special-defense") (url . "https://pokeapi.co/api/v2/stat/5/"))))
#hasheq((base_stat . 70)
(effort . 0)
(stat . #hasheq((name . "speed") (url . "https://pokeapi.co/api/v2/stat/6/"))))))
("types"
. (#hasheq((slot . 1)
(type . #hasheq((name . "bug") (url . "https://pokeapi.co/api/v2/type/7/"))))
#hasheq((slot . 2)
(type . #hasheq((name . "flying") (url . "https://pokeapi.co/api/v2/type/3/"))))))))
; (define d (dict->list test-data)) ; or...you know...could convert from hash table to list?
; (hash? (car (hash-ref test-data "stats"))) ; #t --- BOOM! this gets us a hash table!
; (display (car (hash-ref test-data "stats")))
; (list? (hash-ref test-data "stats")) ;; #t
;; "stats" and "types" AREN'T exactly nested hash tables! They're lists, with hash tables embedded in them!
;; SO! I need a way to test for if something is a LIST, and then if it is a LIST I think then I hash map through that!
;; NEXT STEPS -> https://stackoverflow.com/questions/13504302/racket-scheme-filtering
; (hash-ref test-data "stats") ; all stats
; (hash-ref (car (hash-ref test-data "stats")) 'base_stat) ; value for a given stat
; (hash-ref (hash-ref (car (hash-ref test-data "stats")) 'stat) 'name) ; name for a given stat
; [(list? v) (map (lambda (x) (inspector x)) v)]
; [(hash? (car (hash-ref k "stats")) (map (lambda (x) (inspector x)) v))]
(define (inspector h)
"display the contents of a hash table for human eyeballs and let the hash table fall back out"
(hash-map h
(lambda (k v)
(cond [(list? v) (cond
[(hash? (car (hash-ref k "stats")) (map (lambda (x) (inspector x) v)))] ; this is probably dumb, since it'll require at least another level of nesting...
[map (lambda (x) (inspector x)) v])]
[(display (~a " key: " k "\nvalue: " v "\n=====\n"))])))
h)
(inspector test-data)
|