【问题标题】:D case insensitive associative array?D不区分大小写的关联数组?
【发布时间】:2015-05-04 14:14:50
【问题描述】:

有可能吗?我正在使用 vibe.d 构建一个 REST Api 并实现令牌身份验证。因为我不知道用户将以哪种大小写形式向我发送 Authorization 标头参数,所以我需要以不区分大小写的方式查询它。例如:

string[string] foo;
foo["XXX"] = "YYY";
logInfo(*("xxx" in foo)); // BOOM. Exception here

有可能吗..?

谢谢

【问题讨论】:

    标签: d dmd gdc vibed


    【解决方案1】:

    在存储或查询关联数组的所有键之前,只需将它们小写即可。

    【讨论】:

    • 谢谢。我希望有一个更有效的解决方案。迭代所有键并在每个 HTTP 请求上将它们小写似乎是一种矫枉过正的解决方案......
    • @Davita:你是什么意思,在所有的键上?如果您已经使用小写键构建了数组,那么您只需将示例中的“xxx”小写即可。
    • 我不构建密钥。该数组由 vibe.d 框架提供给我。它包含客户端传递的 http 标头。我在这里不控制套管:)
    • @Davita 那么也许您应该联系 vibe.d 人员,了解一项增强功能,它使您的所有键都小写。但是 AA 本身总是会使用 toHash== 进行键比较,而 string 不区分大小写。
    • @JonathanMDavis I c。谢谢:)
    【解决方案2】:

    如果情况是全部较低或全部较高,那么您可能会有类似

    "xxx" in foo && logInfo(foo["xxx"]);
    "XXX" in foo && logInfo(foo["XXX"]);
    

    也许有更有效的方法来做到这一点。如果您无法控制在 AA 中输入键的方式,那么在查询特定键时似乎必须检查所有大小写变体。

    【讨论】:

      猜你喜欢
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 2013-04-25
      • 2011-11-10
      • 2011-05-09
      相关资源
      最近更新 更多