首页 > 解决方案 > 为用户名添加后缀号避免重复?

问题描述

将后缀(数字)添加到用户名,但如果用户名已经在数组或文件中,则将后缀增加 1,如果再次重复则增加 2,依此类推......我已经使用 count 添加了后缀。但如果已经存在,我需要增加。

firstname = []
lastname  = []
firstchar = []
lastchar  = []
username  = []
rows      = []

CSV.open("userdata.csv", "wb") do |csv|  
    CSV.foreach("employeedata.csv", headers: true) do |row|  
        rows << row
    end

    count = 1

    rows.each do |line|
        firstname = line[0]
        lastname = line[1]
        firstchar = line[0][0].downcase
        lastchar = line[0][-1]
        username = lastname + firstchar + lastchar + "#{count}"
        name = firstname + lastname
        password = SecureRandom.hex(5)
        csv << [firstname] +  [lastname]  + [username] + [password]        
    end
end

标签: arraysruby-on-railsrubycsv

解决方案


我会做这样的事情。

rows      = []

CSV.foreach("employeedata.csv", headers: true) do |row|  
    rows << row
end

user_count = {}

CSV.open("userdata.csv", "wb") do |csv|  
    rows.each do |line|
        firstname = line[0]
        lastname = line[1]
        firstchar = line[0][0].downcase
        lastchar = line[0][-1]

        username = lastname + firstchar + lastchar
        user_count[username] = user_count.fetch(username){ 0 } + 1
        username = username + user_count[username].to_s

        name = firstname + lastname
        password = SecureRandom.hex(5)

        csv << [firstname] +  [lastname]  + [username] + [password]        
    end
end
  1. 读取userdat.csv文件块外的employeedata.csv
  2. 使用user_count哈希来保存用户名的出现次数(lastname + firstchar + lastchar)
  3. 使用Hash fetch方法设置出现次数

推荐阅读