8
votes

Liste avec tableau de chaînes (liste )

J'ai un problème étrange où toutes mes matrices de chaîne ont la même valeur dans la liste. Voici mon code: xxx

map_data_array a toujours différentes données, j'ai vérifié qu'en plaçant le point de pause et que je l'ai vérifié.

Le problème est que map_data a la valeur de tous les éléments identiques. Et cette valeur est les données provenant de la fonction peupluléatafromfile quand je suis 1999.

Ce que je fais mal? : /


7 commentaires

Postez le code pour peuplé de populationAfromfile () aussi


Dans la fenêtre immédiate, essayez ce map_data [0] == map_data [1999] s'il renvoie true Vous ajoutez le même tableau 2000 fois (c'est peupléatafromfile ( ) renvoie le même tableau s'il renvoie false puis populéatafromfile () retourne un nouveau tableau à chaque fois que avec le même contenu


@Golgauth Veuillez ne pas ajouter de balises au titre, il a été supprimé à des fins. N'utilisez pas non plus de code en ligne pour marquer tous les mots-clés de la publication, il crée trop de "bruit".


Vérifiez une autre chose pendant que vous avez débogué - dans la deuxième itération lorsque vous voyez que map_data_array a renvoyé des valeurs différentes, vérifiez que map_data [0] aurait également la même valeur. Cela signifie quelque part que votre code met à jour la même référence.


@Shadowwizard OK, noté pour le code en ligne, je ne le ferai plus jamais, je promets ;-) Mais je n'ai jamais changé le titre ...


@Golgauth juste assez, mais la deuxième partie de mon commentaire est toujours.


peupléatafromfile (); renvoie tout en une seule fois et que le tableau stocke autant que possible, par ex. les 12 premiers éléments. Voir ma réponse.


4 Réponses :


12
votes

Cela ne se produit que si vous placez le même tableau dans la liste. Comme vous n'avez pas donné le code à peupléatafromfile nous ne pouvons que deviner ce qui se passe. Assurez-vous que la fonction renvoie un tableau séparé créé avec nouveau à chaque fois.


10 commentaires

Merci, j'ai reçu "map_data_array" sur la portée "Global".


Mais pourquoi cela se produit? La liste "lient" l'objet et ne pas enregistrer / copier les données que cet objet a?


@tilenslo Ceci se produit parce que peupluléatafromfile (); renvoie probablement les mêmes données sur chaque itération.


Ouais! C'est une bonne synthèse, en ce qui concerne les rares intellers que nous avons ici.


@Dgibbs pas les mêmes données. On dirait qu'il retourne le même tableau, mais à chaque fois avec différentes données.


@svick Il renvoie le même tableau, mais chaque fois avec différentes données. Comment pourrait-il ressembler au même tableau alors? S'il renvoie le même tableau, il doit avoir les mêmes données à considérer identique . L'OP stipule même que les données sont toutes identiques: J'ai un problème étrange où toutes mes matrices de chaîne ont la même valeur dans la liste


@Dgibbs Vous appelez populéatafromfile () une fois et il renvoie un tableau avec certaines données. Vous l'appelez pour la deuxième fois, il faut le même tableau, modifie les données et renvoie cela. Donc, si vous regardez le tableau populéatafromfile () renvoyé juste après son retour, on dirait que cela renvoie différentes données à chaque fois. Mais cela retourne réellement le même tableau à chaque fois, donc si vous regardez la liste après la boucle, vous verrez les mêmes données sur et sur (car c'est le même tableau).


@svick hmmm `Donc, si vous regardez le tableau populéatafromfile () renvoyé juste après son retour, on dirait que cela renvoie différentes données à chaque fois.» Pourquoi suis-je le mal à croire? Puisque nous n'avons pas de code concret pour la méthode, nous ne pouvons que spéculer sur sa mise en œuvre.


@DGIBBS Parce que c'est la question de savoir quelle est la question: "Map_Data_array a toujours des données différentes, j'ai vérifié qu'en plaçant le point de pause et que je l'ai vérifié."


@svick Droite, peut-être qu'il signifie que les données à l'intérieur du tableau sont toutes identiques plutôt que toutes les tableaux contiennent toutes les mêmes données. C'est un peu ambigu.



-5
votes

Dans la boucle Chaque fois que vous changez simplement l'adresse de map_data_array, c'est pourquoi la valeur est toujours modifiée par les nouvelles données obtenues à partir de l'appel de la méthode. Réinitialiser le tableau de chaîne Chaque fois que vous aiderez. Il devrait ressembler à quelque chose comme ça xxx

ou s'il est confus que vous pouvez le rendre simple par xxx


5 commentaires

Je ne comprends pas les réponses ici ... c'est essentiellement la même chose que ce que fait la puissance.


Désolé, c'est faux. Seule la valeur de retour de la fonction détermine ce qui est stocké dans la liste, quelle que soit la variable que vous stockez temporairement (tant que vous ne faites pas de copies).


Dites-vous que si vous déclarez map_data_array en dehors de la boucle, puis changez-la, la valeur de la liste changera également? Ce n'est certainement pas vrai.


Cela ne change rien. La déclaration ne détermine pas l'emplacement de stockage, uniquement nouveau fait.


Oui compris, vous devez vous assurer que la valeur de retour de la méthode (peupléatafromfile) est toujours un nouvel objet au lieu de simplement changer l'objet existant.



0
votes

populéatafromfile () renvoie une matrice de chaîne avec les mêmes valeurs.


1 commentaires

La question dit différemment: "map_data_array a toujours des données différentes".



2
votes

Vous devez traiter vos données dans des morceaux car peupléhafromfile (); code> semble renvoyer toutes ses données en une fois (ou autant que la matrice peut correspondre). Utilisation d'une méthode d'extension, vous pouvez faire quelque chose comme ceci: -

public static IEnumerable<IEnumerable<T>> Batch<T>(this IEnumerable<T> items, int batchSize)
{
     return items.Select((item, inx) => new { item, inx })
                 .GroupBy(x => x.inx / batchSize)
                 .Select(g => g.Select(x => x.item));
}


6 commentaires

Je ne vois vraiment pas comment le traitement des morceaux va-t-il aider. Et pourquoi 11? Pourquoi pas 10000000?


A probablement quelque chose à voir avec: chaîne [] map_data_array = nouvelle chaîne [11]; ... me regarde comme populéatafromfile (); pourrait tout retourner, n'hésitez pas être en désaccord mais :)


Droite, je n'ai pas réalisé ça. Mais cela signifie que votre code fait même moins sens, car il va toujours retourner un seul lot.


??? Comment? Considérez une taille de collecte de 2000. Sur quelle planète renvoyerait-il un seul lot?


J'ai supposé peupléhafromfile () retourne toujours un tableau de 11 éléments. Mais dans tous les cas, je ne vois toujours aucune situation où le lottage des données pourrait résoudre le problème.


Vous savez ce qu'ils disent de supposer