小编Aar*_*nni的帖子

如何从Ruby中的哈希数组中获取唯一元素?

我有一个哈希数组,我想要它的唯一值.打电话Array.uniq给我的不是我的期望.

a = [{:a => 1},{:a => 2}, {:a => 1}]
a.uniq # => [{:a => 1}, {:a => 2}, {:a => 1}]
Run Code Online (Sandbox Code Playgroud)

我期望的地方:

[{:a => 1}, {:a => 2}]
Run Code Online (Sandbox Code Playgroud)

在网上搜索时,我没有想出一个我满意的解决方案.乡亲们建议重新界定Hash.eql?Hash.hash,因为这是Array.uniq被查询.

编辑:在现实世界中遇到这个问题时,哈希值稍微复杂一些.它们是解析的JSON的结果,它具有多个字段,其中一些值也是哈希值.我有一系列的结果,我想过滤掉唯一的值.

我不喜欢重新定义Hash.eql?Hash.hash解决方案,因为我要么Hash全局重新定义,要么为我的数组中的每个条目重新定义它.更改Hash每个条目的定义会很麻烦,尤其是因为每个条目中可能存在嵌套的哈希值.

Hash全球变化有一定的潜力,特别是如果它是暂时完成的话.我想构建另一个类或辅助函数来包装保存旧的定义并恢复它们,但我认为这会增加实际需要的复杂性.

使用inject似乎是重新定义的一个很好的选择Hash.

ruby arrays hash unique

24
推荐指数
3
解决办法
2万
查看次数

使用ms-access确定ODBC失败的真正原因(错误3146)?

我的客户端使用Access作为SQL Server数据库的前端.他们最近在运行一些报告时不时开始收到ODBC-3146错误.据我所知,这只是一个通用的ODBC调用失败错误.

我已经尝试在启动报告的VB脚本中坚持一些错误处理,但我没有运气获得额外的错误信息.

代码看起来有点像这样.

Public Function RunReports()
  On Error GoTo MyErrorTrap

  DoCmd.OpenReport "blah", acViewPreview
  DoCmd.Close

  DoCmd.OpenReport "foo", acViewPreview
  DoCmd.Close

Exit_function:
  Exit Function

MyErrorTrap:
  Dim errX As DAO.Error
  Dim MyError As Error
  If Errors.Count > 1   'This always seems to be 0, so no help
    For Each errX In DAO.Errors  'These are empty even if dont check for Errors.Count
      Debug.Print "ODBC Error"
      Debug.Print errX.Number
      Debug.Print errX.Description
    Next errX
  Else
    Debug.Print "VBA Error"
    Debug.Print Err.Number
    Debug.Print Err.Description
  End If

  'Also have tried …
Run Code Online (Sandbox Code Playgroud)

vbscript ms-access odbc vba

8
推荐指数
1
解决办法
2万
查看次数

标签 统计

arrays ×1

hash ×1

ms-access ×1

odbc ×1

ruby ×1

unique ×1

vba ×1

vbscript ×1