C# Remplir un dictionnaire avec deux listes

Inscrit
12 Avril 2017
Messages
72
Reactions
2
#1
Bonsoir,
J'aimerais savoir comment remplir mon dictionnaire simultanément, afin d'attribuer un ingredientId à sa quantité, pour cela je suis passé par deux listes mais mon code semble largement optimisable le voici :

C#:
 public static RecipeRecord GetRecipe(ushort gid) => Recipes.Find(x => x.ResultId == gid);
        /// <summary>
        /// Retourne les ingrédients ainsi que leurs quantités pour le craft de l'item en param.
        /// </summary>
        /// <param name="gid">item id</param>
        /// <returns></returns>
        public static Dictionary<ushort,uint> GetCraftIngredients(ushort gid)
        {
            Dictionary<ushort, uint> result = new Dictionary<ushort, uint>();
            List<ushort> ingredient = new List<ushort>();
            List<uint> quantity = new List<uint>();
            RecipeRecord recipe = GetRecipe(gid);
            foreach (ushort ingredientId in recipe.IngredientIds)
                ingredient.Add(ingredientId);
            foreach (uint stack in recipe.Quantities)
                quantity.Add(stack);
            for (int index = 0; index < ingredient.Count; index++)
                result.Add(ingredient[index], quantity[index]);
            return result;
        }
 
Inscrit
10 Mai 2015
Messages
357
Reactions
55
#2
Déjà je pense que tu peux remplacer ceci :
Code:
foreach (ushort ingredientId in recipe.IngredientIds)
                ingredient.Add(ingredientId);
par cela :
Code:
ingredient.AddRange(recipe.IngredientIds);
et ainsi de suite pour les autres, mais il doit y avoir moyen de le faire en 1 ligne.

PS : je sais pas si addrange existe en c# mais il doit avoir son équivalent
 
Inscrit
12 Avril 2017
Messages
72
Reactions
2
#4
C 'est vachement mieux merci je ne connaissais pas la méthode ToDictionary :)

Déjà je pense que tu peux remplacer ceci :
Code:
foreach (ushort ingredientId in recipe.IngredientIds)
                ingredient.Add(ingredientId);
par cela :
Code:
ingredient.AddRange(recipe.IngredientIds);
et ainsi de suite pour les autres, mais il doit y avoir moyen de le faire en 1 ligne.

PS : je sais pas si addrange existe en c# mais il doit avoir son équivalent
Ah oui j'avais pas pensé à sa a la base ><
 
Inscrit
29 Octobre 2016
Messages
65
Reactions
2
#5
Sinon ... Tu créer ta propre class dictionnaire et tu fais une List<> de ta classe :)
Mais plus haut c'est en effet la réponse la plus simple et propre
 
Inscrit
10 Mars 2018
Messages
4
Reactions
0
#6
Et bien c'est plus facile avec la méthode ToDictionary :)
 
Inscrit
18 Février 2017
Messages
149
Reactions
18
#7
Oui mais la ça marche par suite de position dans les listes
Pas moyens pour joindre 2 listes d'éléments en lien qui ont un placement aléatoires dans celles-ci.?
 
Inscrit
18 Février 2015
Messages
228
Reactions
7
#8
Oui mais la ça marche par suite de position dans les listes
Pas moyens pour joindre 2 listes d'éléments en lien qui ont un placement aléatoires dans celles-ci.?
Le Join dans la librairie Linq
 
Haut Bas