在Racket哈希表中无法访问数字键?

时间:2015-04-14 01:59:04

标签: hash racket

所以我试图访问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工作,那么为什么这不起作用?

2 个答案:

答案 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传递给比较器。