2010-06-01 12 views
9

हमारे ग्राहक का डेटाबेस किसी सरणी में कीमतों का एक सेट देता है, लेकिन कभी-कभी वे सभी कीमतों को शामिल नहीं करते हैं, यानी, उनके पास उनके सरणी में तत्व गुम हैं। हम एक आईएलिस्ट के रूप में जो पाते हैं उसे वापस करते हैं, जो डेटाबेस से सामग्री पुनर्प्राप्त करते समय बहुत अच्छा काम करता है। हालांकि, हमें सरणी में उचित स्थिति में तत्वों को स्थापित करने में कठिनाइयां हो रही हैं।किसी विशेष अनुक्रमणिका संख्या में एक IList आइटम जोड़ना

क्या आईएलिस्ट बनाने के लिए संभव है तो आईएलआईस्ट में किसी विशेष स्थिति में एक तत्व जोड़ें?

var myList = new List<Model>(); 
var myModel = new Model(); 
myList[3] = myModel; // Something like what we would want to do 
+0

आपका प्रश्न बहुत स्पष्ट नहीं है आकार नहीं बदलेंगे। मैंने जवाब दिया है कि मैं क्या सोचता हूं * आप पूछ रहे हैं, लेकिन यदि आप जो कुछ करने की कोशिश कर रहे हैं उस पर थोड़ा सा विस्तार कर सकते हैं, तो मैं एक बेहतर उत्तर प्रदान करने में सक्षम हो सकता हूं। –

+0

मुझे लगता है कि जवाब मैट्स और इस्माइल का कॉम्बो है। मैं एक आइटम को स्थिति 3 में सम्मिलित करना चाहता हूं, लेकिन सूची में कुछ भी अभी तक मौजूद नहीं है। मैट के जवाब के अनुसार, मुझे एक खाली सूची बनाने की आवश्यकता है जहां गिनती> इंडेक्स मैं डालना चाहता हूं, फिर इस्माइल के जवाब को वास्तव में डालने के लिए उपयोग करने की आवश्यकता है। दूसरा मुद्दा यह है कि सम्मिलन सभी चीजों को ऊपर से ऊपर रखेगा, इसलिए मुझे लगभग 3 से पहले किसी भी लापता प्रविष्टियां बनाने की आवश्यकता है, फिर। (जोड़ें।)। खैर, कम से कम यही वह है जो मैं करने की कोशिश कर रहा हूं। एलओएल –

+0

आप वास्तव में * डालने * नहीं चाहते हैं, हालांकि, क्या आप? यदि सूची में पर्याप्त वस्तुएं हैं, तो क्या आप केवल विशिष्ट तत्व पर एक को ओवरराइट नहीं करना चाहते हैं? यही है "मेरी सूची [3] = myModel;" कर देता है। –

उत्तर

3

सूचियों को समायोजित करने के लिए सूची गतिशील रूप से बढ़ती है। आपको सूची को पूर्वनिर्धारित आकार के साथ प्रारंभ करना होगा। सबसे आसान तरीका है मैं के बारे में सोच सकते हैं कि ऐसा करने के लिए होगा:

var myList = new Model[100].ToList(); 

है कि आप 100 आइटम, सभी शून्य वाले सूची दे देंगे। फिर आप मेरी सूची [3] के लिए एक मूल्य आवंटित करने के लिए स्वतंत्र हैं।

ध्यान दें कि आपके कोड में आप IList<Model> को तुरंत चालू करने का प्रयास कर रहे हैं जो संभव नहीं है - आपको एक इंटरफ़ेस की बजाय एक ठोस प्रकार (जैसे List<Model>) की आवश्यकता है।

+0

मैं जो करना चाहता हूं वह स्थिति 3 में एक नया आइटम चिपकाना है, लेकिन स्पष्ट रूप से सूचियों को संगत होने की आवश्यकता है, इसलिए मुझे 3 से कम पदों पर रिक्त आइटम बनाने की आवश्यकता है, फिर एक नया आइटम डालें। –

+0

ठीक है, तो मेरा जवाब ऐसा करने का एक तरीका है। शून्य वस्तुओं के साथ सूची को दोबारा तैयार करें (अधिकतम राशि तक जो आपको लगता है कि आपको आवश्यकता होगी) तो केवल वही चीज़ें असाइन करें जिन्हें आप चाहते हैं। –

17

उपयोग IList<T>.Insert(int index,T item)

IList<string> mylist = new List<string>(15); 
mylist.Insert(0, "hello"); 
mylist.Insert(1, "world"); 
mylist.Insert(15, "batman"); // This will throw an exception. 

MSDN

सूचकांक IList में आइटमों की संख्या के बराबर होती है, तो से , तो आइटम सूची में जोड़ा जाता है।

सूचियों जैसे संग्रहों के संग्रह में, प्रविष्टि बिंदु का पालन करने वाले तत्व नए तत्व को समायोजित करने के लिए नीचे जाते हैं। यदि संग्रह अनुक्रमित किया गया है, तो स्थानांतरित किए गए तत्वों की अनुक्रमणिका भी अद्यतन की जाती हैं। यह व्यवहार उन संग्रहों पर लागू नहीं होता है जहां तत्वों को अवधारणात्मक रूप से बाल्टी में समूहित किया जाता है, जैसे हैश तालिका।

0

यह डालें और अगर

public static IList<T> InsertR<T>(this IList<T> ilist, int index, T item) { 

     if (!(index < ilist.Count)) { 

      T[] array = Array.CreateInstance(typeof(T), index + 1) as T[]; 

      ilist.CopyTo(array, 0); 

      array[index] = item; 

      if (ilist.GetType().IsArray) { 
       ilist = array; 
      } else { 
       ilist = array.ToList(); 
      } 


     } else 
      ilist[index] = item; 

     return ilist; 

    } 

या

जरूरत
public static IList InsertR<T>(this IList ilist, int index, T item) { 

      if (!(index < ilist.Count)) { 

       T[] array = Array.CreateInstance(typeof(T), index + 1) as T[]; 

       ilist.CopyTo(array, 0); 

       array[index] = item; 

       if (ilist.GetType().IsArray) { 
        ilist = array; 
       } else { 
        ilist = array.ToList(); 
       } 


      } else 
       ilist[index] = item; 

      return ilist; 

     } 
संबंधित मुद्दे