2016-03-04 1 views
0

Je veux être en mesure de lire un tableau un ensemble spécifique de lignes qui se rapportent à un certain nom, j'ai dans un autre tableauComment analyser pour les entiers dans les éléments individuels dans un tableau

par exemple:

dans le tableau de noms j'ai "Ben" stocké comme nom et je veux voir si l'autre tableau contient également le nom "Ben" et si elle le fait, il ajoutera les scores de chaque ligne où "Ben" est mentionné

autre tableau:

"Ben a 5" "Nash a 6" "Ben a 4" "Josh a 1"

il ajoutera seulement 5 et 4 pour obtenir 9

le programme enregistre alors le nombre calculé à une liste.

For Each n As String In commonNames 'for the example the commonNames array contains Ben" 
       If names.Contains(n) Then 
        'add each of their scores and divide by how many their are 
       End If 
      Next 
      Console.ReadLine() 
      For Each n As String In originames 
       'add each score to the user and divide by 1 

toute aide serait apprécié les gars :)

+0

C'est un [suite] (http://stackoverflow.com/ questions/35786753/regex-to-extract-names-from-a-string-into-a-list), n'est-ce pas? ;) – Ian

+0

Oui, je vois essentiellement si un tableau contient le même nom qu'un autre tableau et le compare aux éléments de l'autre tableau et chaque fois que "Ben" est mentionné dans une ligne les scores sur cette ligne sont additionnés –

+0

Il est préférable d'avoir une classe décrivant votre objet ici, quelque chose comme «Personne» – Ian

Répondre

1
Dim data = {"Ben got 5", "Nash got 6", "Ben got 4", "Josh got 1", "Ziggy got 42"} 
Dim names = {"Ben", "Ziggy"} 
Dim results(names.Length - 1) As Int32 

For Each item In data 
    For n As Int32 = 0 To names.Length - 1 
     ' see if this item starts with name data 
     If item.StartsWith(names(n)) Then 
      ' if so, parse out the value 
      Dim parts = item.Split(" "c) 
      results(n) += Int32.Parse(parts(parts.Length - 1)) 
      Exit For 
     End If 
    Next 
Next 

' show contents of parallel arrays: 
For n As Int32 = 0 To names.Length - 1 
    Console.WriteLine("{0} total = {1}", names(n), results(n)) 
Next 

Résultat:

Ben total = 9
Ziggy total = 42

Si les données pourraient inclure des chiffres non à la fin, utilisez TryParse insteas ré. En fonction de la série de questions connexes, vous devriez sérieusement envisager d'utiliser des classes qui vous permettraient de stocker des données connexes ensemble. Plutôt que le nom dans un tableau et le score/nombre dans un autre, une classe aide à tout garder ensemble. Voir: Five Minute Intro To Classes and Lists dans cette réponse.

Utilisation de la classe simple utilitaire NameValuePairfrom this answer le code devient réellement plus simple (une boucle seulement) et le nom et le nombre rester ensemble:

Dim np As NameValuePair      ' scratch var 
Dim players As New List(Of NameValuePair)  ' list 

' add the names you are looking for to 
' the list with 0 Score/Count 
' not needed if they are in the list from code upstream 
For Each n As String In names 
    players.Add(New NameValuePair(n, 0)) 
Next 

For Each item In data 
    Dim parts = item.Split(" "c) 
    ' is there a player name for this one? 
    np = players.FirstOrDefault(Function(w) w.Name = parts(0)) 

    If np IsNot Nothing Then 
     np.Value += Int32.Parse(parts(parts.Length - 1)) 
    End If 
Next 

' the data is together: print it 
For Each np In players 
    Console.WriteLine("Name: {0} has {1} apples", np.Name, np.Value) 
Next 
+0

thx pluto! mais au lieu de les stocker dans un tableau, comment pourriez-vous les stocker sur une liste? –

+0

*** I *** le laisserait tel quel afin que les valeurs soient dans le même ordre que les noms, alors faites: 'Dim resultList As New List (de Int32) (résultats)' sinon vous pouvez vous retrouver avec le les noms qui ne sont pas liés au score. Mais comme indiqué, une bonne classe OOP moderne fonctionnerait mieux pour tout ce que vous faites - beaucoup trop de tableaux parallèles. [Un NameValuePair simple] (http://stackoverflow.com/a/31811533/1070452) pourrait fonctionner pour garder le nom avec le score/nombre – Plutonix