所以我试图访问Racket中的哈希表,但我无法弄清楚它为什么不起作用。
当我在此哈希上调用hash->list
时:
{"26220765": [
{
"queue": "RANKED_SOLO_5x5",
"name": "Viktor's Marauders",
"participantId": "26220765",
"entries": [
{
"leaguePoints": 0,
"isFreshBlood": false,
"isHotStreak": false,
"division": "IV",
"isInactive": false,
"isVeteran": true,
"losses": 168,
"playerOrTeamName": "iGT500",
"playerOrTeamId": "32156611",
"wins": 173
},
{
"leaguePoints": 0,
"isFreshBlood": true,
"isHotStreak": false,
"division": "V",
"isInactive": false,
"isVeteran": false,
"losses": 255,
"playerOrTeamName": "dragdan",
"playerOrTeamId": "20430418",
"wins": 265
},
返回
((|26220765| #hasheq((name . "Viktor's Marauders") (queue . "RANKED_SOLO_5x5") (tier . "PLATINUM") (entries . (#hasheq((playerOrTeamId . "32156611") (division . "IV") (playerOrTeamName . "iGT500") (leaguePoints . 0) (wins . 173) (losses . 168) (isHotStreak . #f) (isVeteran . #t) (isFreshBlood . #f) (isInactive . #f)) #hasheq((playerOrTeamId . "20430418") (division . "V") (playerOrTeamName . "dragdan") (leaguePoints . 0) (wins . 265) (losses . 255) (isHotStreak . #f) (isVeteran . #f)
我无法使用密钥26220765访问哈希。我尝试将其定义为summoner-id
并传递它,我尝试使用'26220765
,但它不起作用。我不明白为什么它会显示垂直条,如果我尝试'|26220765|
或|26220765|
它也不起作用。
我有另一个哈希表,我需要访问哈希"champions"
,并使用'champions
工作,那么为什么这不起作用?
答案 0 :(得分:1)
这有效:
#lang racket/base
(require json)
(define js (string->jsexpr "{\"123\": \"val\"}"))
js ;=> '#hasheq((|123| . "val"))
(hash-ref js '|123|) ;=> "val"
你有不为你工作的类似简短例子吗?
P.S。如果您花点时间接受和/或提出答案,您可能会发现人们更有动力回答。与Racket string to literal?和Getting a specific hash-table from a list in racket?一样。
答案 1 :(得分:0)
在Racket中,哈希表有不同的构造函数。它们之间的区别在于哈希表使用不同的比较器(eq ?,等于?,eqv?,...)。
这可能就是为什么它总是像你想要的那样无法工作的原因。 The different hash tables in racket
事实上,在制作哈希表时,必须知道使用哪个比较器来检查是否相等。例如,您可以设想一个通用实现,您必须将自己的lambda传递给比较器。