खैर सरल - लेकिन अक्षम - तरीका होगा:
var result = _lstNeedToOrder.OrderBy(x => _lstOrdered.IndexOf(x));
एक वैकल्पिक एक मूल्य के वांछित सूचकांक प्राप्त करने की एक दूर तरह से बाहर काम करने के लिए होगा। यदि आपके मान हमेशा सीमा में होंगे [1 ... n] आप केवल "आदेशित" सूची को "मूल्य से सूचकांक की सूची" में परिवर्तित कर सकते हैं। इसके बाद से आप इस्तेमाल कर सकते हैं:
var result = _lstNeedToOrder.OrderBy(x => indexes[x]);
(जहां indexes
0 के लिए शुरू में एक अतिरिक्त मूल्य के लिए होता है, सिर्फ बातें सरल बनाने के लिए)।
वैकल्पिक रूप से, आप मूल्य से सूचकांक तक Dictionary<int, int>
बना सकते हैं। यह अधिक सामान्य होगा, जिसमें यह बहुत मेमोरी लेने के बिना मूल्यों की एक विस्तृत श्रृंखला को संभालेगा। लेकिन एक शब्दकोश लुकअप एक सरणी या सूची लुकअप से स्पष्ट रूप से कम कुशल है।
बस एक ओर टिप्पणी जो एक टिप्पणी के रूप में अच्छी तरह से स्वरूपित नहीं होगा, क्योंकि
, अपने प्रारंभ एक संग्रह प्रारंभकर्ता का उपयोग कर सरल किया जा सकता:
var listToOrder = new List<int> { 1, 5, 6, 8 };
var orderedList = new List<int> { 13, 5, 11, 1, 4, 9, 2, 7, 12, 10, 3, 8, 6 };
स्रोत
2013-08-04 07:19:09
अरे जॉन, क्षमा करें अगर यह एक बेवकूफ सवाल है, लेकिन पहला अक्षम क्यों है? –
@ डिमिटार डिमिट्रोव: प्रत्येक प्रविष्टि की वांछित अनुक्रमणिका खोजने के लिए यह 'इंडेक्सऑफ' का उपयोग करता है। यह अनावश्यक रूप से '_lstOrdered' के आकार पर एक ओ (एन) ऑपरेशन है। –
@DimitarDimitrov शायद क्योंकि 'इंडेक्सऑफ' का उपयोग? –