कभी-कभी आपके पास अनुक्रमण की विलासिता नहीं होती है, या शायद आप एक Linq क्वेरी के परिणामों को उलटना चाहते हैं, या शायद आप स्रोत संग्रह को संशोधित नहीं करना चाहते हैं, यदि इनमें से कोई भी सत्य है, तो Linq आपकी मदद कर सकता है।
Linq के साथ अनाम प्रकारों का उपयोग करते हुए एक Linq एक्सटेंशन विधि, Linq OrderByDescending के लिए एक छँटाई कुंजी प्रदान करने के लिए चयन करें;
public static IEnumerable<T> Invert<T>(this IEnumerable<T> source)
{
var transform = source.Select(
(o, i) => new
{
Index = i,
Object = o
});
return transform.OrderByDescending(o => o.Index)
.Select(o => o.Object);
}
उपयोग:
var eable = new[]{ "a", "b", "c" };
foreach(var o in eable.Invert())
{
Console.WriteLine(o);
}
// "c", "b", "a"
इसे "इनवर्ट" नाम दिया गया है क्योंकि यह "रिवर्स" का पर्याय है और सूची रिवर्स कार्यान्वयन के साथ असंतुलन को सक्षम करता है।
किसी संग्रह की कुछ श्रेणियों को भी रिवर्स करना संभव है, चूंकि Int32.MinValue और Int32.MaxValue किसी भी प्रकार के संग्रह सूचकांक की सीमा से बाहर हैं, हम उन्हें ऑर्डर करने की प्रक्रिया के लिए लाभ उठा सकते हैं; यदि कोई तत्व इंडेक्स दी गई सीमा से नीचे है, तो इसे Int32.MaxValue सौंपा जाता है, ताकि ऑर्डरबायस्केंडिंग का उपयोग करते समय इसका क्रम परिवर्तित न हो, इसी प्रकार, दिए गए रेंज से अधिक इंडेक्स वाले तत्वों को Int32.MinVueue में असाइन किया जाएगा, ताकि वे आदेश देने की प्रक्रिया के अंत तक दिखाई देते हैं। दी गई सीमा के भीतर सभी तत्वों को उनके सामान्य सूचकांक को सौंपा गया है और तदनुसार बदला गया है।
public static IEnumerable<T> Invert<T>(this IEnumerable<T> source, int index, int count)
{
var transform = source.Select(
(o, i) => new
{
Index = i < index ? Int32.MaxValue : i >= index + count ? Int32.MinValue : i,
Object = o
});
return transform.OrderByDescending(o => o.Index)
.Select(o => o.Object);
}
उपयोग:
var eable = new[]{ "a", "b", "c", "d" };
foreach(var o in eable.Invert(1, 2))
{
Console.WriteLine(o);
}
// "a", "c", "b", "d"
मैं इन Linq कार्यान्वयन के प्रदर्शन हिट के बारे में निश्चित नहीं हूं।
लेखन के समय, मुझे Linq के खुद के रिवर्स कार्यान्वयन के बारे में पता नहीं था, फिर भी, यह मजेदार था कि यह काम कर रहा था।
https://msdn.microsoft.com/en-us/library/vstudio/bb358497(v=vs.100).aspx