ruby - 如何从文件加载哈希?

标签 ruby hashtable

有没有 Ruby 工具可以让我加载格式为 (Abbreviated => Abr) 的缩写文件?然后我需要从另一个文件中读取每个单词。如果单词与缩写中的单词匹配,我需要将其更改为缩写词。我想我可以使用哈希,但我不知道如何从文件加载它。

最佳答案

YAML是一种非常通用的数据存储格式,可以在应用程序和编程语言之间传输。 JSON是另一种替代方法,这在网站中很常见。

我将 YAML 用于配置文件之类的内容,因为它非常容易读取和修改。例如,这个 Ruby 结构:

irb(main):002:0> foo = { 'a' => 1, 'b' => [2, 3], 'c' => { 'd' => 4, 'e' => 5 } }
{
    "a" => 1,
    "b" => [
        [0] 2,
        [1] 3
    ],
    "c" => {
        "d" => 4,
        "e" => 5
    }
}

转换为 YAML 时看起来像这样:

irb(main):003:0> puts foo.to_yaml
--- 
a: 1
b: 
- 2
- 3
c: 
  d: 4
  e: 5

您可以将其保存到文件中:

File.open('foo.yaml', 'w') { |fo| fo.puts foo.to_yaml }

并读回:

bar = YAML.load_file('foo.yaml')
{
    "a" => 1,
    "b" => [
        [0] 2,
        [1] 3
    ],
    "c" => {
        "d" => 4,
        "e" => 5
    }
}

同样,使用 JSON:

puts foo.to_json
{"a":1,"b":[2,3],"c":{"d":4,"e":5}}

您可以像使用 YAML 一样将 JSON 保存到文件中,然后重新加载它并将其转回哈希。虽然语法有点不同:

irb(main):011:0> File.open('foo.json', 'w') { |fo| fo.puts foo.to_json }
nil
irb(main):012:0> bar = JSON.parse(File.read('foo.json'))
{
    "a" => 1,
    "b" => [
        [0] 2,
        [1] 3
    ],
    "c" => {
        "d" => 4,
        "e" => 5
    }
}

任何一种语言的最大胜利是可以读取 YAML 或 JSON 的任何语言都可以读取这些文件并使用数据,无论是读取还是写入。

一旦有了散列,字符串替换就非常容易了,因为 Ruby String 的 gsub 理解散列。这是来自 the docs :

If the second argument is a Hash, and the matched text is one of its keys, the corresponding value is the replacement string.

这意味着你可以这样做:

foo = 'Jackdaws love my giant sphinx of quartz'
bar = { 'quartz' => 'rosy quartz', 'sphinx' => 'panda' }
foo.gsub(Regexp.union(bar.keys), bar)
"Jackdaws love my giant panda of rosy quartz"

在进行替换时您确实需要注意字边界冲突,但是模式中的 \b 标志可能会有所帮助。让这项工作成为读者的练习。

关于ruby - 如何从文件加载哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10305626/

相关文章:

ruby-on-rails - RSpec with Ruby on Rails - 测试路由时参数数量错误(1 代表 0)

ruby - 这段 Ruby 代码是如何工作的? (哈希)(Learnrubythehardway)

Ruby 数组迭代和变异

ruby-on-rails - 动态分配背景图片 scss/sass

ruby - 在哈希的键数组中追加元素

ruby - Ruby 的 "hello world"中的对象是什么?

c++ - 如何在 C++ 标准库中启用散列?

c - 如何在c中使用双散列进行搜索

java - Java Hashtable 中的 Long 问题

java - 在 HashMap 中查找第一、第二、第三最小值