मैं एक आदेश को परिभाषित करने Func
की एक सूची है उपरोक्त कैसे करें जब सूची में अनुक्रमिक क्रमों की संख्या हो सकती है, यह जानने का प्रयास कर रहा है। क्या यह संभव है?मापदंडों का मनमाना संख्या से आदेश देने वस्तुओं को Linq
5
A
उत्तर
6
people = people.OrderBy(ordering[0]).ThenBy(ordering[1]).ThenBy(ordering[2]);
रूप
var orderedPeople = people.OrderBy(ordering[0]);
orderedPeople = orderedPeople.ThenBy(ordering[1]);
orderedPeople = orderedPeople.ThenBy(ordering[2]);
people = orderedPeople;
ही है तो आप बस इस तरह एक पाश लिखें:
if (ordering.Count != 0)
{
var orderedPeople = people.OrderBy(ordering[0]);
for (int i = 1; i < ordering.Count; i++)
{
orderedPeople = orderedPeople.ThenBy(ordering[i]);
}
people = orderedPeople;
}
0
आप गतिशील रूप से अभिव्यक्ति के साथ इसे अभिव्यक्ति के साथ ऐसा करना चाहेंगे। यहाँ और जानकारी: Dynamic LINQ and Dynamic Lambda expressions?
3
आप इस
के लिए इसी तरह कुछ करने के लिए सक्षम होना चाहिएpeople = people.OrderBy(ordering[0])
foreach(var order in ordering.Skip(1))
{
people = people.ThenBy(order);
}
अल ternately
for(i = 0; i < ordering.Count; i++)
{
people = i == 0 ? people.OrderBy(ordering[i]) : people.ThenBy(ordering[i]);
}
2
याद रखें कि LINQ निष्पादन स्थगित कर दिया गया है। आप की तरह, परिणाम तक पहुँचने में कुछ करने से पहले अभिव्यक्ति क्रमिक रूप से निर्माण कर सकते हैं: दूसरों
var ordered = unordered.OrderBy(ordering.First());
foreach (var orderingItem in ordering.Skip(1))
{
ordered = ordered.ThenBy(orderingItem);
}
4
के रूप में उल्लेख किया है, तो आप ऐसा करने के लिए एक पाश का उपयोग कर सकते हैं।
आप चाहें, तो आप भी Aggregate
ऑपरेटर का उपयोग कर सकते हैं:
// Requires a non-empty ordering sequence.
var result2 = ordering.Skip(1)
.Aggregate(people.OrderBy(ordering.First()), Enumerable.ThenBy);
(या)
// Shorter and more "symmetric" but potentially more inefficient.
// x => true should work because OrderBy is a stable sort.
var result = ordering.Aggregate(people.OrderBy(x => true), Enumerable.ThenBy);
+1
मुझे इन की संक्षिप्तता पसंद है, धन्यवाद – fearofawhackplanet
आप वास्तव में एक गिनती के लिए जाँच करने के लिए की जरूरत नहीं है, अगर आप सिर्फ स्विच क्या किया जा रहा है लूप – msarchet
में किया गया मुझे कुछ कारणों से "यह वही है" थोड़ा सा सच नहीं था। मैंने सोचा कि उन्हें सीधे पालन करना था। बहुत बहुत धन्यवाद। – fearofawhackplanet
हम्मम्म ... वास्तव में वे वही नहीं हैं। 'फिर' '' ऑर्डर किए गए अनन्य 'पर संचालित होता है, जिसे मैंने याद किया। मुझे लगता है कि मैं इसके आसपास काम कर सकता हूं। –
fearofawhackplanet