J'ai une liste contient des objets dépend de la valeur code> de la valeur code> et p> mais je voudrais avoir J'ai essayé d'utiliser Je voudrais trier par la liste avec le résultat comme la 2e table. P> J'ai besoin de grouper Je joins mon code ici pour plus de description
Mon code DottNetFiddle P> bw code> avec
forme code> et
Quantité .
la valeur de la préquantité code> a été donnée, je vais trier em> par chaque élément de la liste
préshape code> et
Prequantitaire code>. La forme code> code> est la priorité premier em> la quantité
code> est seconde em> priorité. J'ai trié la liste
groupeby code> puis trier par la forme code> code> et
Quantité code> dépend du
Preshape code> et
Prequantitaire code>. Le résultat est bien comme ceci: p>
list
pour code> boucle et
swap code> fonction pour trier mais le résultat n'est pas comme ce que je recherche. P>
public static void Main()
{
List<BW> lst = new List<BW>(){
new BW(){ shape = "MN11", quantity = 20},
new BW(){ shape = "MN11", quantity = 10},
new BW(){ shape = "MN22", quantity = 14},
new BW(){ shape = "MN22", quantity = 20},
new BW(){ shape = "ANT", quantity = 16},
new BW(){ shape = "ANT", quantity = 18},
new BW(){ shape = "ANT", quantity = 20},
new BW(){ shape = "ANT", quantity = 10}
};
string preShape = "MN22";
int preQuantity = 20;
var tempList = lst.GroupBy(c=>c.shape).Select(g=> new {shapeGroup = g.Key, BW = g.OrderBy(c=> c.shape.Equals(preShape)).ThenByDescending(c=>c.quantity)}).OrderByDescending(g=>g.shapeGroup.Equals(preShape));
//var tempList = lst.GroupBy(c=>c.shape).Select(g=> new {shapeGroup = g.Key, BW = g.OrderByDescending(c => c.shape.Equals(preShape))}).OrderBy(g=>g.BW.First().quantity == preQuantity);;
foreach (var shape in tempList)
{
var lastGroupBW_Item = shape.BW.LastOrDefault();
//Console.WriteLine("{0}", shape.shape);
foreach (var bw in shape.BW)
{
if(shape.BW.ToList().IndexOf(bw) > 0 )
{
shape.BW.OrderBy(c=>c.quantity == lastGroupBW_Item.quantity).ThenBy(c=>c.quantity);
}
Console.WriteLine("{0}|{1}", bw.shape,bw.quantity);
}
}
}
5 Réponses :
alors éléments avec Démo: strong> (J'ai utilisé résultat: strong> p> forme == preshape code> doit être sur le supérieur em> ainsi que
Quantité == Prequantitaire Code>; Vous pouvez trier par
bool code> pour ceci (note, que
false
tuple code> pour émuler
bw code>) p>
Merci pour votre aide, c'est presque ce que je cherche. La quantité est triée par ASC mais j'aimerais avoir le résultat comme la 2e table de ma question.
Cela ne produit pas la sortie souhaitée. | Mn11 | 20 devrait être 4ème, pas 3ème.
@binh nguyen: Eh bien, alors, s'il vous plaît, vous devez expliquer pourquoi l'ordre souhaité (dans la 2e table) est (mn11, 10) code> et seulement i>
( Mn11, 20) code>. Veuillez noter que
20 code> est
préquantité code> et c'est pourquoi il semble être sur le top i>, comme vous avez posé la question. Il semble donc que
(mn11, 20), (mn11, 10) code> est le bon ordre.
@DMITRYYBYCHENKO Merci, j'ai eu la réponse de mon post. Votre tour a fonctionné bien, je peux l'utiliser pour un autre de mes problèmes.
Utilisez linq pour commander par la forme, puis par quantité exemple de travail ici a> p> p>
Merci pour votre aide mais le résultat est le même que je fais.
@binhnguyen comme je peux remarquer que la quantité n'est pas triée. Corrigez-moi si je me trompe
La "quantité" est triée
@binhnguyen Si la quantité triée alors pourquoi (ant, 10) code> est livré avant
(ant, 16), (ant, 18) code>
Désolé j'avais tort, la deuxième table est le résultat que je voudrais avoir et le premier est le résultat que j'ai essayé dans mon Dottnetfiddle. Comme je l'ai dit dans des commentaires ci-dessus, je voudrais comparer la "forme" avec la "pré-forme" en premier. S'ils sont égaux, je comparerai la "quantité" avec "pré-quantité", s'ils correspondent à l'élément contiennent la valeur de la valeur. Si d'autres éléments du groupe ont la même "forme" la "quantité" sera triée ASC. Mais la "quantité" du dernier élément du groupe A doit être suivie avec la même "quantité" du premier élément du groupe B.
| MN22 | 20 | | MN22 | 14 | | MN11 | 10 | | MN11 | 20 | | ANT | 20 | | ANT | 18 | | ANT | 16 | | ANT | 10 |
Je pense que cela suit la spécification.
public class BW { public string shape { get; set; } public int quantity { get; set; } } class Program { public static void Main(string[] args) { List<BW> lst = new List<BW>(){ new BW(){ shape = "MN11", quantity = 20}, new BW(){ shape = "MN11", quantity = 10}, new BW(){ shape = "MN22", quantity = 14}, new BW(){ shape = "MN22", quantity = 20}, new BW(){ shape = "ANT", quantity = 16}, new BW(){ shape = "ANT", quantity = 18}, new BW(){ shape = "ANT", quantity = 20}, new BW(){ shape = "ANT", quantity = 10} }; string preShape = "MN22"; int preQuantity = 20; // Order by shape first; the everybody gets it part var shapeSorted = lst .OrderBy(bw => bw.shape != preShape) .ThenByDescending(bw => bw.shape); // Order gropus by ascending, but if equal to last item in the previous group then first var currentSpecialQ = preQuantity; var r = new List<BW>(); foreach(var group in shapeSorted.GroupBy(bw => bw.shape) ) { r.AddRange(group.OrderBy(bw => bw.quantity != currentSpecialQ).ThenBy(bw => bw.quantity)); currentSpecialQ = r.Last().quantity; } foreach(var bw in r ) Console.WriteLine($"{bw.shape}, {bw.quantity}"); } }
Merci beaucoup, c'est exactement je cherchais.
@ la solution de Tymtam est la bonne réponse pour mon post. Merci à tout le monde pour l'aide, j'ai appris plus d'astuce pour utiliser Lambda pour trier par ma liste. P>
Pourquoi
ant 10 code> serait plus élevé que
ant 16 code> et
ant 18 code>?
Vos deux ensembles de résultats sont complètement égaux. C'est juste pas trié. Demandez-vous comment trier votre liste? Mais quel ordre de tri est 20,10,16,18?
Le résultat n'est pas comme ce que je cherche i> ... Que cherchez-vous? Quel est le problème et la question ici?
S'il vous plaît expliquer la logique du genre que vous voulez. La première liste est triée par ordre décroissant sur les deux propriétés, la seconde, cependant, a un tri assez étrange sur la propriété de quantité.
@Fabio Désolé pour une réponse tardive, anth 10 supérieure à la fourche 16 et 18e 18 parce que je voudrais trier par la quantité ASC.
Pourquoi avez-vous
ant 20 code> hors de la commande dans votre représentation de la table des envie alors? une faute de frappe? ainsi que
mn22 20 code> ci-dessus
mn22 14 code>
@Brettcaswell, je voudrais trier par la "forme" d'abord alors la "quantité". Une fois que la "forme" est triée, la "quantité" sera la suivante. Mais chaque groupe de "forme" que je voudrais trier la "quantité" du dernier élément de ce groupe sera plus élevé la "quantité" du premier élément du groupe suivant. Par exemple comme la deuxième table. Vous pouvez voir que la fourmi 20 sera plus basse le MN11 et le reste de l'élément avec groupe de fourmis aura "Quantité" ASC
@Holger: S'il vous plaît voir mon commentaire sur Brett
@Zohar peled, s'il vous plaît voir mon commentaire sur Bratt.
Eh bien, dans ce cas, les résultats souhaités que vous avez postés sont fausses. Vous allez d'ascendance à la commande descendante à plusieurs reprises dans la propriété Quantité.