Beste Tweakenaars,
Programmeertaal: C# (versie 7.3)
Ontwikkelomgeving: Visual Studio 2019 Community
Context:
Een algoritme dat ervoor zorgt voor het genereren van een unieke string van 7 karakters lang. Naar mijn idee werkt het goed, want ik heb het meerdere malen keer gecontroleerd met unit tests (automatische testen).
Eisen algoritme:
Dezelfde karakters, bijvoorbeeld 'a' en 'a', mogen niet langs elkaar staan. Het maakt niet uit op welke positie van de array, dit mag niet voorkomen.
Probleem/vraag:
1# Het algoritme is te lang (methode 'GenerateTransactionId') en vroeg ik me af of iemand weet hoe ik dit algoritme eenvoudiger kan maken en nog even snel werkt of zelfs nog sneller/efficiënter zijn taak kan voltooien?
2# Daarnaast kreeg ik een Index OutOfRangeException, daardoor werd ik gedwongen om te kijken of de result array leeg was om vervolgens dan een karakter toe te voegen aan die array. Op die manier zorg ik ervoor dat ik die exception ontkom. Misschien dat u ook hierover wat kan adviseren? Een andere aanpak of iets dergelijks..
Probleem #2 heeft betrekking op de volgende regel code:
Ik hoor graag uw bevindingen en eventueel wat beter kan. Alvast bedankt
.
Hieronder volgt het algoritme met eventueel de bijbehorende variabelen:
Programmeertaal: C# (versie 7.3)
Ontwikkelomgeving: Visual Studio 2019 Community
Context:
Een algoritme dat ervoor zorgt voor het genereren van een unieke string van 7 karakters lang. Naar mijn idee werkt het goed, want ik heb het meerdere malen keer gecontroleerd met unit tests (automatische testen).
Eisen algoritme:
Dezelfde karakters, bijvoorbeeld 'a' en 'a', mogen niet langs elkaar staan. Het maakt niet uit op welke positie van de array, dit mag niet voorkomen.
Probleem/vraag:
1# Het algoritme is te lang (methode 'GenerateTransactionId') en vroeg ik me af of iemand weet hoe ik dit algoritme eenvoudiger kan maken en nog even snel werkt of zelfs nog sneller/efficiënter zijn taak kan voltooien?
2# Daarnaast kreeg ik een Index OutOfRangeException, daardoor werd ik gedwongen om te kijken of de result array leeg was om vervolgens dan een karakter toe te voegen aan die array. Op die manier zorg ik ervoor dat ik die exception ontkom. Misschien dat u ook hierover wat kan adviseren? Een andere aanpak of iets dergelijks..
Probleem #2 heeft betrekking op de volgende regel code:
C#:
1
2
| if (result == "") result = selectedChar.ToString(); |
Ik hoor graag uw bevindingen en eventueel wat beter kan. Alvast bedankt
Hieronder volgt het algoritme met eventueel de bijbehorende variabelen:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
| // Fields private Random randomNum; private string result = string.Empty; private int index, indexNew; private static int[] numbers = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; private static int maxLength = numbers.Count() - 4; private static char[] alphabetLowChars = new char[] { 'a','b','c','d','e','f','g','h','i','j','k','l','m', 'n','o','p','q','r','s','t','u','v','w','x','y','z' }; // Methods public string GenerateTransactionId() { randomNum = new Random(); for (int i = 0; i < maxLength; i++) { index = i; indexNew = randomNum.Next(0, alphabetLowChars.Count()); char selectedChar = alphabetLowChars[indexNew]; if (result == "") result = selectedChar.ToString(); char currentChar = result[index]; if (currentChar == selectedChar) { do { int tmpNewIndex = randomNum.Next(0, alphabetLowChars.Count()); result += alphabetLowChars[tmpNewIndex]; } while (result[index].Equals(result[index + 1])); } if ((result.Length - i) < result.Length) if(result.Length <= maxLength) result += alphabetLowChars[indexNew]; } return result; } |
[ Voor 4% gewijzigd door umask op 10-04-2020 16:52 . Reden: Vergeten methode naam erbij te zetten. ]