J'essaie de résoudre ce problème pendant des jours et je me demandais si quelqu'un pouvait aider, je suis toujours nouveau à c # afin que toute chose que vous puissiez recommander serait une bonne aide!
Ce que j'essaie de faire est de faire enregistrer un nouveau nom / marqueur dans la liste Noms / scores existants. P>
J'ai déjà essayé un certain nombre de méthodes différentes mais sans chance. P>
Heres un exemple de ce que j'essaie de FAIRE: P>
public static string[,] CombineArrayFunction(string[,] array1, string[,] array2)
{
string[,] finalArray = new string[array1.Length + array2.Length, 2];
Array.Resize<string[,]>(ref array1, array1.Length + array2.Length);
Array.Copy(array2, 0, array1, array1.Length, array2.Length);
for (int i = 0; i < finalArray.Length; i++)
{
finalArray[i, 0] = array1[i, 0];
finalArray[i, 1] = array1[i, 1];
}
return finalArray;
}
3 Réponses :
Vous pouvez utiliser le dictionnaire. C'est beaucoup plus simple qu'un tableau multidimensionnel.
var dict1 = new Dictionary<string, string> { { "Bob", "100" } };
var dict2 = new Dictionary<string, string> { { "Dave", "200" }, { "Sam", "300" }, { "Nick", "310" } };
var combinedDict = dict1.Concat(dict2).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.First().Value);
foreach (var item in combinedDict)
{
Console.WriteLine($"{item.Key} - {item.Value}");
}
Je ne pense pas que ce cas demande i> ("vous besoin i> utiliser dictionnaire"?) Utilisation d'un dictionnaire. Seulement que cela peut être déduit que ce serait l'une des structures les plus appropriées. Sur cette note, je pense qu'il serait approprié d'expliquer pourquoi B> Un dictionnaire est approprié dans des cas «personnes-données» comme celui-ci, plutôt que d'autres structures pouvant atteindre le comportement fusion seul, comme < Code> Liste
Vous suppose i>, sans aucune preuve, qu'il n'y a pas de clés en douceur et s'il y en a, que vous pouvez les jeter silencieusement. Je pense que c'est une approche dangereuse.
Le nom dupliqué est un problème logique commercial. Disons que deux candidats avec le même nom ont un score de cravate. Comment les distinguons-nous quand même? Par conséquent, il est prudent de supposer qu'ils doivent entrer des noms différents.
Vous ne pouvez pas utiliser car les éléments de votre tableau ne sont pas de type pour les matrices multidimensionnelles là-bas est Afaik no méthode intégrée, vous devez donc le faire simplement "manuellement" p> A Si votre cas d'utilisation est plutôt seulement sur le stockage et par exemple Affichage de cette information quelque part, je recommanderais de préférer utiliser un type personnalisé approprié et une simple liste plate comme par exemple p> alors vous pouvez simplement ajouter un élément p> < Pré> xxx pré> ou si nécessaire plusieurs utilisateurs utilisant Il y a beaucoup plus d'avantages de cette liste. P> Par exemple, il peut être très simplement itéré sans avoir à se soucier de deux indices tout le temps. P> et en particulier pour avoir une carte de score puisque vous pouvez maintenant utiliser toute la magie de linq ( par exemple trier cette liste alphabétique p> ou par score p> ou utilisez à la fois sur le premier ordre et si l'ordre est égal à Nom p> ou retour toutes les entrées appartenant à "Bob" p> et si vous avez toujours besoin d'accéder à un certain entrée renvoie le score le plus élevé de "bob" ou Un autre avantage de cette liste est qu'il est directement sérialisable, donc 1. Vous pouvez le voir en réalité dans l'inspecteur de l'unité. Il est sauvé si vous par exemple. Remplissez-le avec des valeurs par défaut dans l'inspecteur. P> Vous pouvez également vous sévéraliser directement et le désérialiser à la plupart des formats tels que XML, JSON (pour ceux dont vous avez besoin d'une classe d'emballage pour la liste) ou simplement dans un fichier texte. avec une ligne par entrée, etc. p> p> string [] code>. Il strong> fonctionnerait-il si vous aviez une chaîne [] [] [] code> car vous pourriez alors utiliser p>
Dictionnaire code> Comme mentionné par Rawitas Krungkaew pourrait Soyez une meilleure approche dans le cas où vous avez des touches strong> uniques, car elle est également plus rapide dans l'accès si vous recherchez plus tard une valeur spécifique. P>
addrange code> p>
à l'aide de SYSTE.LINQ; code>) et filtrer et trier votre liste. p> linq code> offre beaucoup de magie. Par exemple, trouvez le score maximum pour "bob" code> p> 0 code> 0 code> 0 code> 0 code> S'il n'y en avait pas dans la liste. p>
La matrice de deux dimensions n'est pas la meilleure structure de données pour cela (plus dans @derhugo Post). Au code réel, Vous ne pouvez pas redimensionner une matrice multidimensionnelle. Si vous le pouviez, vous n'auriez pas besoin du finalArray, car vraiment pas besoin de boucler lorsque vous pouvez utiliser arra1.length code> est le nombre total de tous les éléments de toutes les dimensions. Ce que vous voulez vraiment, c'est array1.getlength (0) code>. P> redimensionner code> crée de toute façon un nouveau tableau. Mais tu ne peux pas. p> array1.length code> ne contient plus la taille de la matrice d'origine. Maintenant, il renvoie la taille de la matrice redimensionnée, il s'agit donc d'un bug. P> array.copy code>. Voici mon code P> public static string[,] CombineArrayFunction(string[,] array1, string[,] array2)
{
if (array1.GetLength(1) != array2.GetLength(1))
{
throw new NotSupportedException("Arrays have to be the same size");
}
string[,] finalArray = new string[array1.GetLength(0) + array2.GetLength(0), array1.GetLength(1)];
Array.Copy(array1, 0, finalArray, 0, array1.Length);
Array.Copy(array2, 0, finalArray, array1.Length, array2.Length);
return finalArray;
}
Êtes-vous obligé d'utiliser des tableaux ici ou pouvez-vous utiliser un autre type de données?