Ce que j'ai mis en œuvre avec A pour une boucle est ceci:
phraseSources2 = (List<Data1.Model.PhraseSource2>)phraseSources
.Select(x => new PhraseSource2()
{
Kanji = x.Kanji,
Kana = x.Kana,
Furigana = x.Furigana,
English = x.English,
}).ToList();
4 Réponses :
Si la collection source est accessible par index, vous pouvez utiliser une surcharge sur la sélection qui vous donne l'index actuel.
var source = new[] { 'a', 'b', 'c' };
var result = source.Select((x, i) => new { Current = x, Next = source.Length > i+1 ? source[i+1] : ' '});
Oui, la collection source est accessible par un index mais dans le cas de cette question, comment puis-je faire le comparateur de plusieurs propriétés comme je le fais. Cela pourrait-il aussi être fait?
Tout ce que vous avez à faire est simplement de configurer une variable à l'intérieur d'une requête où vous pouvez facilement récupérer la valeur suivante ou précédente comme celle-ci: Si vous souhaitez vérifier certaines conditions avant, vous voulez peut le faire comme ceci: p>
Merci mais comment pourrais-je mettre en œuvre cela pour vérifier quelque chose de plus compliqué comme je fais que je fais où je vérifie si deux choses sont identiques, puis si la longueur de la propriété anglaise est plus petite. Puis-je simplement trier la liste par Kanji, Kana et Anglais (longueur), puis choisissez le dernier élément avec une sorte de commande par?
J'ai ajouté une deuxième approche en utilisant des index dans ma réponse. Pourriez-vous être quelque chose dont vous avez besoin?
Merci, je vérifie que maintenant. Qu'en est-il du chèque que je mettez dans l'endroit où je vérifie la longueur de la propriété anglaise et utilisez simplement l'élément de la liste avec le plus long?
Ceci est le chèque que je fais: ps.english.length <= psnext.Anglais.Longueur de longueur
Vous pouvez simplement vérifier sur où avant de sélectionner.
Bonjour, je pense qu'il est proche d'être ce dont j'ai besoin, mais je reçois des erreurs ici: Kanji NextEnglish = (liste
Remplacer le premier kanji avec var, ma mauvaise
Si je comprends votre problème Correcly, je ne "regarder pas", mais utilisez plutôt quelque chose comme ceci: p> groupy code> et groupe par kanji code> et kana code> alors Sélectionnez CODE> Le plus long anglais code> comme valeur dans le phraséource2 code> objet. var phraseSource2 = phraseSources
.GroupBy(x => new {Kanji = x.Kanji, Kana = x.Kana})
.Select(g => new PhraseSource2 {
Kanji = g.Key.Kanji,
Kana = g.Key.Kana,
Furigana = g.First().Furigana,
English = g.OrderByDescending(x => x.English.Length).First().English
});
Il n'y a pas de méthode intégrée, mais il existe des bibliothèques tierces qui offrent cette fonctionnalité. Morelinq est une bibliothèque gratuite et gratuite qui offre un windowleft code> méthode d'extension, qui traite une séquence dans une série des sous-séquences représentant un sous-ensemble fenêtré de l'original. Pour que vous puissiez l'utiliser pour traiter vos phrases de phrases à deux et jeter les paires qui ont deux phrases égales. Enfin, sélectionnez la première phrase des paires survivant.
using static MoreLinq.Extensions.WindowLeftExtension;
var phraseSources2 = phraseSources
.WindowLeft(size: 2)
.Where(phrases => // phrases is of type IList<PhraseSource2>
{
if (phrases.Count == 2) // All have size 2 except from the last
{
var ps = phrases[0];
var psNext = phrases[1];
return ps.Kanji != psNext.Kanji || ps.Kana != psNext.Kana ||
ps.English.Length > psNext.English.Length;
}
else // The last is a single phrase
{
return true;
}
})
.Select(window => window[0]) // Select the first phrase
.ToList();
Avez-vous voulu dire
var psnext = phrasalisation [i + 1]; code>?Si je comprends votre problème, je ne serais pas conforme à votre problème, je ne voudrais pas "regarder", mais utiliser
groupby code> à la place et groupe parkanji code> etkana code> puis sélectionnez le plus long < Code> anglais code> comme nouveauphraséource2 code> objet.Ce code semble mal à cause de
PS code> etpsnext code> étant défini sur la même chose initialement. En outre, il va causer une exception d'index hors de portée lorsque INCR considrezi code> dans cesi code> sans vérifier s'il est allé au-delà de la fin de la matrice / liste. Égalementphraséource2 code> estnull code> donc il y a une exception de référence null aussi.@Sanisinghhuttunen - Merci d'avoir souligné cette erreur de mienne.
@juhararr - Merci d'avoir souligné que ce serait un problème quand cela dépasse la taille de la liste.
Github.com/morelinq/morelinq#lag -
LAG code> ou < Code> Diriger code>. Remarque - Ceci suppose que votre source estiEnumerable code> plutôt queiquéryable code> basé.