J'ai deux maintenant, j'ai besoin d'obtenir les combinaisons de déplacement à une chaîne de liste p> Donc, la liste de sortie contiendra p> maintenant, j'utilise mais il ne donne pas la sortie correcte p> mais la sortie requise est comme p> Liste
imbriqué pour boucle code> pour cela.?
Y a-t-il un moyen de faire cela en utilisant
linq code> ou
lambda expression code>
S'il vous plaît aidez-moi à faire cela.
Merci d'avance p>
pour boucle code> strong> p> p> p> P> P>
List<String> ResultTwo = new List<string>();
for (int i = 0; i < ListOne.Count; i++)
{
for (int j = 0; j < ListTwo.Count; j++)
{
if(ListOne[i] != ListTwo[j])
if (ResultTwo.Contains(ListOne[i] + "-" + ListTwo[j]) == false && ResultTwo.Contains(ListTwo[j] + "-" + ListOne[i]) == false)
ResultTwo.Add(ListOne[i] + "-" + ListTwo[j]);
}
}
5 Réponses :
Après vos modifications, cela devrait faire le truc: la deuxième version qui conserve la commande (articleFromList1 - itemFromList2): P> var result =
from o in
(
from a in ListOne
from b in ListTwo
let condition = a.CompareTo(b)
where condition != 0
select new { a, b, condition }
)
group o by
o.condition < 0 ? o.a + "-" + o.b : o.b + "-" + o.a into g
select g.Select(n => n.a + "-" + n.b).Take(1).ToArray()[0];
@Daniel - C'est une réponse. +1!
Sa donne uniquement a-b code>. Mais la sortie attendue est
a-b code>,
c-a code>,
c-b code>
@Pramodh, comment accédez-vous à cette logique?
@astander: S'il vous plaît voir mon deuxième édition (exemple de code à l'aide de pour boucle code>)
@Euphoric Je pense que votre bowvote n'est pas justifié que la question initiale et le concept a été édité 3 fois et je n'ai pas suivi toutes les modifications.
@Andrzej Nosal: D'accord, on dirait que tu as gardé.
Vous voulez donc tous les allumettes sauf
et aucun duplicates. p>
ici c'est: p> indiquer l'exigence est de 90% de la bataille. P > Si vous avez besoin du premier élément de l'appariement de la première liste, cela le fera: P>
IEnumerable<string> result =
(
from a in ListOne
from b in ListTwo
select new
{
A = a,
B = b,
Combo = a.CompareTo(b) < 0 ? a + "-" + b : b + "-" + a
} into x
group x by x.Combo into g
select g.Select(x2 => x2.A + "-" + x2.B).First()
)
Le second montre une certaine erreur comme `ne peut pas convertir implicitement le type 'String' à 'Bool'`
var listA = new List<string> { "A", "B", "C" }; var listB = new List<string> { "A", "B" }; var result = listA.SelectMany((a, indexA) => listB.Where((b, indexB) => listB.Contains(a) ? !b.Equals(a)&&indexB > indexA : !b.Equals(a)) .Select(b => string.Format("{0}-{1}", a, b)));
Que diriez-vous de la logique de validation est ajoutée à la liste
class Program { static void Main(string[] args) { List<string> a = new List<string>() { "C", "D", "L" }; List<string> b = new List<string>() { "C", "L", "C", "D" }; var pairValuesNotEqual = from vara in a from varb in b where vara != varb select new Pair(vara, varb); Set sets = new Set(); sets.AddRange(pairValuesNotEqual); foreach (var item in sets) { Console.WriteLine(item.First + " - " + item.Second); } Console.ReadLine(); } } public class Set : List<Pair> { public new void AddRange(IEnumerable<Pair> pairs) { foreach (var item in pairs) { this.Add(item); } } public new void Add(Pair item) { if (!IsExists(item)) base.Add(item); } private bool IsExists(Pair item) { foreach (Pair i in this) { if (i.First == item.Second && i.Second == item.First) return true; } return false; } }
Je ne pense pas que Linq soit assez bon pour cela, je l'ai eu, mais ce n'est pas beau:
List<string> outList = new List<string>(); foreach (string s1 in ListOne) { foreach (string s2 in ListTwo) { if (s1 != s2 && !outList.Contains(s1 + "-" + s2) && !outList.Contains(s2 + "-" + s1)) { outList.Add(s1 + "-" + s2); } } }
Voulez-vous associer les éléments des deux listes de sorte que chaque élément de la liste d'une liste est uniquement jumelé avec des éléments de la liste deux qui arrivent après la survenue de l'élément de la liste? Peut-être que vous pourriez poster votre code actuel, si ce n'est pas trop gros.
@RMX: édité dans .............
Vous devriez expliquer que voulez-vous vraiment. Ce n'est pas vraiment clair de votre question. Laquelle des paires voulez-vous entrer dans la sortie et que vous ne voulez pas? Le choix est-il effectué sur les valeurs ou sur les positions dans les listes? Par exemple, quelle devrait être la sortie de liste1 = D, C, B, A; list2 = a, b, c, d? Quelle devrait être la sortie de liste1 = a, b, c; list2 = B, B, D, B?