2016-12-22 2 views
1

J'ai essayé de comprendre comment supprimer des éléments dans ma liste de tableaux où la valeur contient une chaîne de texte.Supprimer tous les éléments d'une ArrayList qui contient la chaîne

Mon tableau pourrait ressembler à ceci:

[0] "\"MAERSKA.CO\",N/A,N/A,N/A,N/A,N/A,N/A" 
[1] "\"GEN.COABB.ST\",N/A,N/A,N/A,N/A,N/A,N/A" 
[2] "\"ARCM.ST\",\"Arcam AB\",330.00,330.50,332.00,330.50,330.00" 

Et mon ArrayList est créé comme ceci:

string stringToRemove = "NA"; 
ArrayList rows = new ArrayList(csvData.Replace("\r", "").Split('\n')); 

La question est de savoir comment supprimer toutes les entrées qui contient "NA". J'ai essayé le RemoveAt ou le RemoveAll avec plusieurs combinaisons de Contient mais je ne peux pas sembler obtenir le code correct.

Je ne veux pas créer un nouveau tableau s'il peut être évité.

Cordialement Flemming

+0

S'il vous plaît écrire ce qui était et ce qui devenait. –

+0

qu'en est-il de chaîne.Remplacer (données, "")? rows = new ArrayList (csvData.Replace ("\ r", "") .Split ('\ n'). Sélectionnez (st => st.Replace (st, ""))); – Tistkle

+0

La solution de Simser & Gabba fonctionne parfaitement. Accepter va à Simser comme 2 solutions ont été fournies. –

Répondre

1

Si vous voulez réduire votre ArrayList avant instancier votre variable, pensez à utiliser LINQ:

ArrayList rows = new ArrayList(csvData.Replace("\r", "").Split('\n').Where(r => !r.Contains(stringToRemove)).ToList()); 

Si vous voulez réduire votre ArrayList après instanciation, vous pouvez essayer ceci:

for (int i = 0; i < rows.Count; i++) 
{ 
    var row = (string)rows[i]; 
    if (row.Contains(stringToRemove)) 
    { 
     rows.RemoveAt(i); 
     i--; 
    } 
} 
0

Le code suivant crée une liste en sortie contenant toutes les chaînes sauf "N/A":

var outputs = new List<string>(); 
foreach (var item in input) 
{ 
    var splitted = item.Split(','); 
    foreach (var splt in splitted) 
    { 
     if (splt != "N/A") 
     { 
      outputs.Add(splt); 
     } 
    } 
} 

L'entrée est votre tableau.

+0

Je pense que la question était de supprimer les entrées/lignes contenant "N/A", ne créant pas une nouvelle liste de tous les mots sauf "N/A". – Simser

+0

Merci pour votre contribution. Je peux utiliser cette solution ailleurs mais les réponses ci-dessous conviennent à la solution pour mieux répondre à vos questions. –