J'ai deux Par exemple: P>
Liste 1: strong> Ce que je veux, c'est une liste fusionnée 1, mais avec des valeurs mises à jour. Est-ce que quelqu'un a une bonne méthode d'extension qui fera cela ou tout code élégant pour effectuer cette opération. La liste finale devrait être: p>
ID, valeur Liste
ID, valeur où l'identifiant est peuplé et la valeur est vide et contient des identifiants de 1 à 10.
1, ""
2, "
...
10, "" p>
ID, valeur et autres attributs remplis de valeurs mais cette liste est un sous-ensemble de la liste 1 en termes d'identifiants. (E.g seulement 3 articles)
2,67
4,90
5,98 P>
1, ""
2,67 // Valeur de la liste 2
3, "
4,90
5,98
6, ""
...
10, "" p>
6 Réponses :
Ceci est o (m * n) mais devrait faire le travail pour les listes arbitraires si les listes sont garanties, alors elle pourrait être amenée à O (n) à la Coût de plus de code. L'algortihm serait p>
Je voudrais probablement utiliser un dictionnaire plutôt qu'une liste: Si vous parlez de propriétés forts> d'un objet, il sera plus délicat, mais toujours difficile . p> p>
Si vous avez les deux listes triés par ID em>, vous pouvez utiliser une variation de l'algorithme de fusion classique: Notez que cela nécessite également Bien sûr, vous pouvez également envelopper cela dans une méthode d'extension p> list2 Code> Pour être un sous-ensemble strict de
list1 code> en termes d'id (c.-à-d.
list1 code> contient vraiment tous les identifiants em> de
list2 Code>) p>
Utiliser LINQ: LIST1 = LIST2.UNION (LISTE1); P>
J'ai essayé votre code avec deux listes de type Liste <étudiant> code> L'étudiant de la classe ressemble à ceci
étudiant étudiant = nouvel étudiant () {id = 1, nom = "foo"} code > Utilisation de cette syntaxe
list1 = list2.toliste (). Union (list1.toliste ()). Tolist (); Code> mais il n'a pas fusionné les deux listes; Il suffit de les coller ensemble comme un Union -See exemple 3 a>. Êtes-vous sûr qu'il
fusionne la liste avec des valeurs mises à jour code>?
J'ai trouvé cette question sur la façon de Supprimer les duplicats pendant la fusion des listes A> et cela confirme que votre code ne fonctionne que si la classe dépasse gethascode () code> et
égale () code>
private void btnSearch_Click(object sender, EventArgs e) { String searchBy = cmbSearchBy.Text.ToString(); String searchFor = txtSearchFor.Text.Trim(); var List3 = (from row in JobTitleDB.jobList where (row.JID.ToString()+row.JobTitleName.ToString().ToLower()).Contains(searchFor.ToLower()) select row).ToList(); if (searchBy == "All") { dgJobTitles.DataSource = null; //dgJobTitles.DataSource = List1; //dgJobTitles.DataSource = List2; //dgJobTitles.DataSource = List1.Concat(List2); //dgJobTitles.DataSource = List1.Union(List2); dgJobTitles.DataSource = List3; //dgJobTitles.DataSource=List1.AddRange(List2); } }
S'il vous plaît fournir une explication ici. Supprimer le code commenté inutile.
Dictionary<int, string> List1 = new Dictionary<int, string>(); List1.Add(1,""); List1.Add(2,""); List1.Add(3,""); List1.Add(4,""); List1.Add(5,""); List1.Add(6,""); Dictionary<int, string> List2 = new Dictionary<int, string>(); List2.Add(2, "two"); List2.Add(4, "four"); List2.Add(6, "six"); var Result = List1.Select(x => new KeyValuePair<int, string>(x.Key, List2.ContainsKey(x.Key) ? List2[x.Key] : x.Value)).ToList();
Votre valeur i> une chaîne ou un int? Vous semble montrer des chaînes dans la liste 1 alors que l'INT dans la liste 2.