2010-05-12 6 views
8

J'ai un tableau de type chaîne qui ressemble à ceci: "test1|True,test2|False,test3|False,test4|True". Il s'agit essentiellement d'un tableau 2d comme [test1] [True] [test2] [Faux] [test3] [Faux] [test4] [True].Comment convertir un tableau 2D en objet dictionnaire

Je veux convertir en un dictionary<string,bool> LINQ, quelque chose comme:

Dictionary<string, bool> myResults = results.Split(",".ToCharArray).ToDictionary() 

des idées?

+0

Il n'y a pas une telle chose comme un tableau de type chaîne. Je pense que vous voulez dire un tableau encodé dans une chaîne. –

+0

désolé, oui c'est une chaîne que je veux convertir dans un tableau 2d à la volée à l'intérieur de l'instruction linq et convertir en un objet dictionnaire – Webcognoscere

+0

Les réponses à cette question démontrent juste combien de façons différentes il y a de faire les choses. La réponse de tout le monde jusqu'à présent est légèrement différente, mais toutes valables. Mon vote va pour [Marcelo] (http://stackoverflow.com/questions/2817367/how-to-convert-a-2-d-array-into-a-dictionary-object/2817419#2817419), comme je pense c'est le plus élégant. –

Répondre

5

d'abord transformer votre chaîne dans un tableau approprié:

String sData = "test1|True,test2|False,test3|False,test4|True"; 
String[] sDataArray = sData.Split(','); 

Ensuite, vous pouvez traiter le String[] dans un dictionnaire:

var sDict = sDataArray.ToDictionary(
     sKey => sKey.Split('|')[0], 
     sElement => bool.Parse(sElement.Split('|')[1]) 
    ); 

La méthode ToDictionary prend 2 fonctions qui extraient les données de clé et d'élément de chaque élément du tableau source.

Ici, j'ai extrait chaque moitié en divisant le "|" et ensuite utilisé la première moitié comme clé et la seconde j'ai analysé dans un bool à utiliser comme élément.

De toute évidence, cela ne contient aucune vérification d'erreur, donc cela pourrait échouer si la chaîne source n'était pas séparée par une virgule, ou si chaque élément n'était pas séparé par un tube. Alors soyez prudent avec l'origine de votre chaîne source. S'il ne correspond pas exactement à ce modèle, il échouera, vous devrez donc faire quelques tests et valider.

Marcelo's réponse est similaire, mais je pense que c'est un peu plus élégant.

+0

Merci Simon, merci de l'expliquer. – Webcognoscere

8
var d = results.Split(',') 
       .Select(row => row.Split('|')) 
       .ToDictionary(srow => srow[0], srow => bool.Parse(srow[1])); 
+0

Brillant, merci un mec mil – Webcognoscere

-1

Quelque chose comme cela devrait fonctionner:

var fullString = "Test,True|Test2,False"; 

var query = from item in fullString.Split('|') 
      let splitted = item.Split(',') 
      let value = bool.Parse(splitted[1]) 
      select new { Key = splitted[0], Value = value }; 

var dict = query.ToDictionary(pair => pair.Key, pair => pair.Value); 
-1

Vous pouvez essayer quelque chose comme ceci:

var resultsArray = results.Split(','); 

var myResults = new Dictionary<string, bool>(); 

foreach (var str in resultsArray) 
{ 
    var parts = str.Split('|'); 
    myResults.Add(parts[0], bool.Parse(parts[1])); 
} 
Questions connexes