You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby CSV行删除功能优化:输入无效邮箱时提示重新输入

改进Ruby CSV删除功能:添加邮箱有效性循环验证

原始CSV数据(cars.csv)

make,model,color,doors,email
dodge,charger,black,4,practice1@whatever.com
ford,focus,blue,5,practice2@whatever.com
nissan,350z,black,2,practice3@whatever.com
mazda,miata,white,2,practice4@whatever.com
honda,civid,brown,4,practice5@whatever.com
corvette,stingray,red,2,practice6@whatever.com
ford,fiesta,blue,5,practice7@whatever.com
bmw,m4,black,2,practice8@whatever.com
audi,a5,blue,2,practice9@whatever.com
subaru,brz,black,2,practice10@whatever.com
lexus,rc,black,2,practice11@whatever.com

原始代码

def delete_from_data
    print "\nTo delete a car, enter the email (this is case sensitive): \n> "
    delete_car = gets.chomp

    #this allows me to delete a certain row based on email
    table = CSV.table("cars.csv")
    table.delete_if do |row|
        row[:email] == delete_car
    end
    File.open("cars.csv", "w") do |f|
        f.write(table.to_csv)
    end

    #this shows the updated student roster after deleting user
    puts "\nThis is the updated roster after deleting: #{delete_car}"
end

改进后代码(添加邮箱存在性验证循环)

require 'csv'

def delete_from_data
    # 先读取CSV并提取所有有效邮箱,存入集合提升查找效率
    table = CSV.table("cars.csv")
    valid_emails = table.map { |row| row[:email] }.to_set

    delete_car = nil
    loop do
        print "\nTo delete a car, enter the email (this is case sensitive): \n> "
        delete_car = gets.chomp.strip

        if valid_emails.include?(delete_car)
            break # 邮箱有效,退出循环
        else
            puts "⚠️  Error: Email not found. Please enter a valid email from the roster."
        end
    end

    # 执行删除操作
    table.delete_if { |row| row[:email] == delete_car }
    File.open("cars.csv", "w") { |f| f.write(table.to_csv) }

    # 输出更新后的提示
    puts "\nUpdated roster after deleting entry for: #{delete_car}"
end

# 调用方法(如需直接运行可取消注释)
# delete_from_data

关键改动说明

  • 提前缓存有效邮箱:先加载CSV表格,将所有邮箱存入Set(比数组查找效率更高),避免重复读取文件
  • 循环验证输入逻辑:用loop do实现循环输入,直到用户输入的邮箱在有效列表中才退出循环
  • 明确错误提示:输入无效邮箱时给出清晰提示,引导用户输入正确内容
  • 代码结构优化:将验证逻辑与删除逻辑分离,代码可读性更强

内容的提问来源于stack exchange,提问作者burner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:20:15