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

Hash 无法访问Racket哈希表中的数字键?,hash,racket,Hash,Racket,所以我试图访问Racket中的哈希表,但我不明白为什么它不起作用 当我在此哈希上调用hash->list时: {"26220765": [ { "queue": "RANKED_SOLO_5x5", "name": "Viktor's Marauders", "participantId": "26220765", "entries": [ { "leaguePoints": 0, "isFreshBlood": false,

所以我试图访问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访问哈希。我试着将它定义为召唤者id,并传递它,我试着使用26220765,它不起作用。我不明白为什么要用竖条显示,如果我尝试使用
'26220765 |
26220765 |
也不起作用

我有另一个哈希表,在那里我需要访问哈希
“champions”
,并且使用
“champions”
工作,那么为什么这个不工作呢?

这个工作:

#lang racket/base
(require json)
(define js (string->jsexpr "{\"123\": \"val\"}"))
js ;=> '#hasheq((|123| . "val"))
(hash-ref js '|123|) ;=> "val"
你有没有类似的简短例子来说明什么对你不起作用


p、 如果你花点时间接受和/或投票,你可能会发现人们更愿意回答。与and类似。

在Racket中,哈希表有不同的构造函数。它们之间的区别在于哈希表使用不同的比较器(eq?、equal?、eqv?、…)

这可能就是为什么它不总是像你希望的那样工作的原因。


事实上,在创建哈希表时,它必须知道使用哪个比较器来检查相等性。例如,您可以想象一个通用实现,其中您必须传递自己的lambda以用作比较器。

使用
“| 26220765”
应该可以工作。它是用竖条显示的,因为它是一个符号,但它只由数字字符组成,所以需要转义。@AlexisKing'| 26220765有效,我不知道我以前在做什么。但是如果我将号码26220765定义为召唤者id会怎样?基本上我需要
“|召唤者id |
,但我想我需要逃离
召唤者id
,所以“| |之间是一个数字,但这个数字会根据我使用API查找的对象而变化。有什么想法吗?召唤者id是字符串还是数字?@AlexisKing这是一个数字;我最后这样做了:
(定义summ key(if(not(hash?league hash json))(printf“无需判断的排名数据”。\n”)(hash key league hash json))
,因为在这个特定点上,它总是返回一个以id为键的哈希,另一个哈希作为值,我发现散列键列出了散列中的所有键,但只有最外层,如果你明白我的意思的话?因此,这将始终是一个具有正确id的列表,因此我只需选择列表中的汽车,我知道它将始终匹配(如果它们存在)。谢谢你的帮助!你可能想使用
(string->symbol(number->string caller id))
。它说我需要15个声望才能更新某些东西,这就是为什么我一直没有这么做,也许是因为我在手机上,但我看不到一种方法来选择答案并将我的问题标记为已解决