Permetto al mio utente di creare profili, il che significa che potrebbero potenzialmente crearne alcuni con nomi duplicati. Questo può essere problematico quindi voglio impedirgli di farlo. Ho codificato questo algoritmo ricorsivo di primo passaggio per rilevare quale numero di copie dovrei assegnare a Name
, tuttavia sono quasi certo che c'è un modo migliore per scriverlo, ma il blocco dei miei scrittori mi ha fatto cadere il martello - In effetti, non ero nemmeno sicuro di come pronunciare la domanda o Google qualcosa che potrebbe già esistere. Ecco il codice:
//Check to see if there is another profile with the same name
var exiProf = profiles.FirstOrDefault(p => p.Name == newProf.Name);
int counter = 1;
while (exiProf != null)
{
// Only match with the last number surrounded with parens
Regex exp = new Regex(@"\((\d)\)$");
Match ma = exp.Match(exiProf.Name);
if(ma.Success)
{
num = int.Parse(ma.Groups[1].Value);
var numChar = (counter).ToString();
var nextNumChar = ( ++counter).ToString();
newProf.Name = newProf.Name.Replace(numChar, nextNumChar);
//Loop to make sure new name doesn't already exist
exiProf = profiles.FirstOrDefault(p => p.Name == newProf.Name);
}
else
{
newProf.Name += " (" + num + ")";
//Loop to make sure new name doesn't already exist
exiProf = profiles.FirstOrDefault(p => p.Name == newProf.Name);
}
}
profiles.Add(newProf);
Se cerco di aggiungere "New", "New", "New", "New"
in questo ordine, "Nuovo (1)", "Nuovo (2)", "Nuovo (3)", "Nuovo (4)" è ciò che appare nel mio lista.
Nota: ho codificato algoritmi qui perché sono in grado di trasformare lo pseudocodice in C #.