簡體   English   中英

如何讀取哈希數組作為 input.txt 文件以在 ruby​​ 中排序

[英]how to read array of hashes as input.txt file to sort in ruby

這是我保存到 input.txt 文件的哈希數組

arr_hash = [{"Name"=>"Aku","Email"="hello@gmail.com,"place"=>"abc"},
         {"Email"=>"xyz@gmail.com.com","place="India","Name"=>"Rocky"}
         {"place"=>"India","Email"=>"abc@gmail.com","Name"=>"Rocky"}]

下面是一段代碼,我嘗試從文本文件中讀取哈希數組進行排序(main.rb)

file = File.open("input.txt","r+")
sorted = file.map{|h| h.values_at(:Name, :place, :Email)}.sort
puts sorted

這是生成新文件以顯示輸出的代碼

output_file = File.open("outputfile.txt","w" )
output_file << sorted
output_file.close

當我嘗試讀取 input.txt 文件以對其進行相應排序時,出現以下錯誤

undefined method `values_at' for #<String:0x000055fac2499158> (NoMethodError)

文本文件對我來說似乎不是一個合適的選擇。 相反,你為什么不使用 JSON ?

你可以像這樣定義你的文件:

{
  "1": {
    "Name": "Aku",
    "Email": "hello@gmail.com",
    "place": "abc"
  },
  "2": {
    "Email": "xyz@gmail.com.com",
    "place": "India",
    "Name": "Rocky"
  },
  "3": {
    "place": "India",
    "Email": "abc@gmail.com",
    "Name": "Rocky"
  }
}

像這樣在 Ruby 中導入它:

require 'json'

file = File.read 'input.json'
data = JSON.parse file

data.class 
# => Hash

data.first
# => ["1", {"Name"=>"Aku", "Email"=>"hello@gmail.com", "place"=>"abc"}]

data.each_value { |value| puts value['Name'] }
# => Aku
# => Rocky
# => Rocky

將 Hash 轉儲為 JSON 真的很容易:

my_hash = {
  "Name"=>"Aku",
  "Email"=>"hello@gmail.com",
  "place"=>"abc"
}

File.write('output.json', JSON.dump(my_hash))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM