【发布时间】:2018-10-01 13:33:39
【问题描述】:
我有一个这样的哈希数组
@t = [{"id"=>"819827", "nm"=>"Razvilka", "countryCode"=>"RU"},
{"id"=>"524901", "nm"=>"Moscow", "countryCode"=>"RU"},
{"id"=>"1271881", "nm"=>"Firozpur Jhirka", "countryCode"=>"IN"},
{"id"=>"1283240", "nm"=>"Kathmandu", "countryCode"=>"NP"}] # ... + 100,000 more
我可以从具有精确拼写的特定哈希键中进行搜索,例如
@t.find {|x| x["nm"] == "Moscow"}
它会很快返回散列。
但这不会考虑大小写、语法或近似匹配。我该怎么做?
【问题讨论】:
-
定义语法或近似匹配。
-
如果拼写为“moscow”或“mosc”或“MoScoV”等,它应该能够返回任何匹配的东西?
-
我认为您应该使用库(如建议的那样)而不是自己动手做的工作。
-
也许是正则表达式,
@t.find {|x| x["nm"][/moscow/i] }但就像我说的,不能确定它有多耐用。另请注意find仅返回第一个匹配项。对所有匹配项使用select。 -
尽管我希望能够为您提供一个快速的纯 Ruby 解决方案,但您是否考虑过将这些数据加载到数据库(甚至是启用了 Soundex 的 SQLite)并在那里进行模糊搜索?
标签: arrays ruby sorting search hash