Bonjour,
Soit la situation suivante :
On développe une application qui compte le nombre de fois qu’un terme apparaît dans un ensemble de fichiers texte.
Cette application présente le code suivant
Il est demandé de remplir cette boucle foreach et que soient respectés les éléments suivants
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 class Counter{ System.Collections.Concurrent.ConcurrentDictionary<string, int> _wordCounts = new System.Collections.Conccurent.ConccurentDictionary<string, int> (); public Action<DictionaryInfo> ProcessDirectory(){ return (dirInfo => var files = dirInfo.GetFiles(*.cs).AsPaérallel<FileInfo>(); files.ForAll<FileInfo>(fileInfo => { var fileContent = File.RealdAllTexct(fileInfo.FullName); var sb = new StringBuilder(); foreach(var val in fileContent){ sb.append(char.IsLetter(val) ? val.ToString().ToLowerInvariant() : ); } string[] wordsInFile = sb.ToString().Split(new []{ }, StringSplitoptions.RemoveEmptyEntriens); foreach(var word in wordsInFile) { } });
1-remplir l’objet _wordCounts avec une liste de mots et le nombre d’occurrences de chaque mot
2-assurer que la mise à jour de l’objet ConcurrentDictionary puisse se produire en parallèle
Plusieurs possibilités sont proposées
Après avoir étudié chaque possibilité, il me semble que chacune d’entre elles pourraient convenir même si parfois le code est un peu lourd, alors que c’est la possibilité A qui convient le mieux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 A _wordsCounts.AddOrUpdate(word, 1, (s,n) =>n+1) ; B int value; if(_wordCounts[word]=value++; } else { _wordCounts[word]=1 } C var value = _wordCounts.GetOrAdd(word, 0); _wordCounts[word]=value++; D var value =_wordCounts.GetOrAdd(word,0); _wordCounts.TryOrUpdate(word, value+1,value);
Qu’en pensez-vous ?
Pouvez-vous me dire si la possibilité A est davantage en en relation avec le fait que la mise à jour puisse se produire en parallèle ?
Merci beaucoup de votre réponse.
Cordialement.
new_wave
Partager