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"...]
所以我想,我可以很容易地获取和读取国家名称,代码可以 return 首都名称。也许这个解决方案会很糟糕,但我不知道。
我这样试过:
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"],...]
我怎样才能在 ruby 中做到这一点?
改变
userarr << line.split.map(&:to_s)
至
userarr << line.split(',')
您需要用逗号分隔,而不是 space。
使用Enumerable#flat_map
这个单行代码会做你想做的,返回一个展平的数组。您当然可以将其分解为多个方法调用以进行调试或提高可读性,但它按发布的方式工作。
File.readlines('/tmp/corpus').map(&:chomp).flat_map { |line| 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"]
我想阅读这个文本文件:
Almanya,Berlin
Andorra,Andorra La Vella
Arnavutluk,Tiran
Avusturya,Viyana
Belarus,Minsk
并将其转换为这样的数组:
country = ["Almanya","Berlin","Andorra","Andorra La Vella"...]
所以我想,我可以很容易地获取和读取国家名称,代码可以 return 首都名称。也许这个解决方案会很糟糕,但我不知道。
我这样试过:
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"],...]
我怎样才能在 ruby 中做到这一点?
改变
userarr << line.split.map(&:to_s)
至
userarr << line.split(',')
您需要用逗号分隔,而不是 space。
使用Enumerable#flat_map
这个单行代码会做你想做的,返回一个展平的数组。您当然可以将其分解为多个方法调用以进行调试或提高可读性,但它按发布的方式工作。
File.readlines('/tmp/corpus').map(&:chomp).flat_map { |line| 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"]