簡體   English   中英

Ruby讀取文件並將其轉換為數組

[英]Ruby Read File And Convert It To An Array

我想閱讀這個文本文件:

Almanya,Berlin
Andorra,Andorra La Vella
Arnavutluk,Tiran
Avusturya,Viyana
Belarus,Minsk

並將其轉換為這樣的數組:

country = ["Almanya","Berlin","Andorra","Andorra La Vella"...]

所以我想,我可以輕松地獲取並閱讀國家名稱,並且代碼可以返回大寫名稱。 也許這種解決方案將是一個糟糕的解決方案,但我不知道。

我這樣嘗試過:

File.open('login.txt') do |f|
     f.lines.each do |line|
       userarr << line.split.map(&:to_s)
     end
end

但是結果是:

[["Almanya,Berlin"], ["Andorra,Andorra", "La", "Vella"],...]

我怎樣才能簡單地在紅寶石中做到這一點?

使用Enumerable#flat_map

這種單線將執行您想要的操作,並返回一個展平的數組。 您當然可以將其分為多個方法調用以進行調試或提高可讀性,但是它可以按發布方式工作。

File.readlines('/tmp/corpus').map(&:chomp).flat_map { |line| line.split ?, }

更改

userarr << line.split.map(&:to_s)

userarr << line.split(',')

您需要用逗號而不是空格分開。

只需將文件讀取為字符串,然后以逗號和換行符分隔即可:

File.read("my_file").split(/,|\n/)
  #=> ["Almanya", "Berlin", "Andorra", Andorra La Vella", "Arnavutluk",
  #    "Tiran", "Avusturya", "Viyana", "Belarus", "Minsk"]

要消除任何前導或尾隨空格,請添加.map(&:strip)或將正則表達式更改為/\\s*,\\s*|\\s*\\n\\s*/

如果文件很大,則可以一次讀取一行:

File.foreach("my_file").flat_map { |s| s.split(/\s*,\s*|\s*\n\s*/) }
  #=>["Almanya", "Berlin", "Andorra", "Andorra La Vella", "Arnavutluk",
  #   "Tiran", "Avusturya", "Viyana", "Belarus", "Minsk"] 

暫無
暫無

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

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