ruby - 在 Ruby 中从 .txt 文件中查找唯一姓氏
问题描述
我需要从如下所示的 .txt 文件中找到唯一的姓氏:
Kent, Mackenna -- ut
Voluptatem ipsam et at.
Marven, Gardens -- non
Facere et necessitatibus animi.
McLaughlinn, Matt -- consequatur
Eveniet temporibus ducimus amet eaque.
Lang, August -- pariatur
Unde voluptas sit fugit.
Brad, Nick -- et
Maiores ab officia sed.
Adam, Levine -- error
Repellendus alias officia amet et perspiciatis.
Learner, York -- nesciunt
Incidunt et ut necessitatibus porro.
Ortiz, Andrew -- fuga
Tempore eos et hic.
Lang, Bryant -- et
Laborum perferendis inventore eveniet.
到目前为止,我有:
FNAME = 'example.txt'
# maps for last name in file
def last_name_from_file(file_name)
last_name = File.readlines(file_name).reject(&:empty?)
last_name.map do |line|
line.split.first
end
end
puts last_name_from_file('example.txt')
但这给了我输出,其中包括 Lorem 文本和姓氏。
#Kent
#Voluptatem
#Marven
#Facere
#McLaughlinn
#Eveniet
#Lang
#Unde
#Brad
...
解决方案
我看到 lorem 线是均匀的,所以你可以拒绝它们。
def last_name_from_file(file_name)
File.
readlines(file_name).
reject.
with_index(1) { |_, id| id.even? }.
map { |line| line.split(',').first }.
uniq
end
好的,我将如何获得名字?
你可以这样做:
def names(file_name)
File.
readlines(file_name).
reject.
with_index(1) { |_, id| id.even? }.
map { |line| line.split(' --').first.split(', ') }.
map { |ln, fn| { lastname: ln, firstname: fn } }
end
现在您可以调用它:
names = names('example.txt')
names
# => [{:lastname=>"Kent", :firstname=>"Mackenna"}, {:lastname=>"Marven", :firstname=>"Gardens"}, {:lastname=>"McLaughlinn", :firstname=>"Matt"}, {:lastname=>"Lang", :firstname=>"August"}, {:lastname=>"Brad", :firstname=>"Nick"}, {:lastname=>"Adam", :firstname=>"Levine"}, {:lastname=>"Learner", :firstname=>"York"}, {:lastname=>"Ortiz", :firstname=>"Andrew"}, {:lastname=>"Lang", :firstname=>"Bryant"}]
names.map { |name| name[:lastname] }
# => ["Kent", "Marven", "McLaughlinn", "Lang", "Brad", "Adam", "Learner", "Ortiz", "Lang"]
names.map { |name| name[:firstname] }
# => ["Mackenna", "Gardens", "Matt", "August", "Nick", "Levine", "York", "Andrew", "Bryant"]
推荐阅读
- excel - Excel 函数连接返回意外的附加双引号字符
- c# - 如何使用 C# 生成的密钥在 Angular 中使用 RSA 加密数据
- python - 我无法使用 Python tkinter 在新窗口上显示图像
- android - 带有嵌套动态 WHERE 子句的 Room @Relation
- linux - 删除 -mtime 选项中的硬编码天数以在 shell 脚本中查找文件
- vue.js - Vue 无法读取 undefined 的属性影片
- architecture - 手柄的另一边是什么?
- javascript - 通过 $set 更改对象属性给出:“TypeError: Cannot read property 'call' of undefined”
- javascript - 指定 vuetify 网格的宽度
- javascript - 我有一个需要重组为所需格式的对象数组。我尝试使用迭代使用数组解构