सिस्टम का रूपांतरण। सूची में सुधार करें


279

कल रात मैंने सपना देखा था कि निम्नलिखित असंभव था। लेकिन उसी सपने में, एसओ से किसी ने मुझे अन्यथा कहा। इसलिए मैं यह जानना चाहूंगा कि क्या इसे परिवर्तित System.Arrayकरना संभव हैList

Array ints = Array.CreateInstance(typeof(int), 5);
ints.SetValue(10, 0);
ints.SetValue(20, 1);
ints.SetValue(10, 2);
ints.SetValue(34, 3);
ints.SetValue(113, 4);

सेवा

List<int> lst = ints.OfType<int>(); // not working

2
नीचे दिए लिंक से पता चलता है कि यह c # codegateway.com/2011/12/…

6
आपको Arrayवास्तव में जो है उसे डालना है, int[]ToList((int[])ints).ToList();

जवाबों:


428

खुद को बचाएं कुछ दर्द ...

using System.Linq;

int[] ints = new [] { 10, 20, 10, 34, 113 };

List<int> lst = ints.OfType<int>().ToList(); // this isn't going to be fast.

बस भी कर सकते हैं ...

List<int> lst = new List<int> { 10, 20, 10, 34, 113 };

या ...

List<int> lst = new List<int>();
lst.Add(10);
lst.Add(20);
lst.Add(10);
lst.Add(34);
lst.Add(113);

या ...

List<int> lst = new List<int>(new int[] { 10, 20, 10, 34, 113 });

या ...

var lst = new List<int>();
lst.AddRange(new int[] { 10, 20, 10, 34, 113 });

15
पूर्णता के लिए ध्यान दें: दूसरा तरीका केवल C # 3.0+ में उपलब्ध है।
जॉन सेइगेल

21
चूंकि इंट सरणी पहले से ही लागू है IEnumerable<int>, इसलिए OfType<int>()आवश्यक नहीं है। ints.ToList();पर्याप्त होता।
हेनजी

16
टाइप के लिए, आपको System.Linq
JasonPlutext

11
इन उदाहरणों में से कोई भी वास्तव में वास्तविक प्रश्न का उत्तर नहीं देता है। लेकिन मुझे लगता है कि उसने जवाब स्वीकार कर लिया था इसलिए वह खुश थी। फिर भी, इनमें से कोई भी वास्तव में एक सरणी को सूची में नहीं बदलता है। "सिस्टम का रूपांतरण। सूची में सुधार करें"। उस उदाहरण को पूर्णता IMO के लिए जोड़ना चाहिए। (शीर्ष उत्तर और सभी होने के नाते)
सोरेन उलीदत्त

4
Enum.GetValues ​​(टाइपोफ़ (Enumtype))। Cast <itemtype> ()। ToList ()
Phan

84

सूची के लिए एक रचनाकार अधिभार भी है जो काम करेगा ... लेकिन मुझे लगता है कि इसके लिए एक मजबूत टाइप्ड सरणी की आवश्यकता होगी।

//public List(IEnumerable<T> collection)
var intArray = new[] { 1, 2, 3, 4, 5 };
var list = new List<int>(intArray);

... ऐरे वर्ग के लिए

var intArray = Array.CreateInstance(typeof(int), 5);
for (int i = 0; i < 5; i++)
    intArray.SetValue(i, i);
var list = new List<int>((int[])intArray);

इस दृष्टिकोण और उपयोग करने वाले के बीच ToList(), जो अधिक कुशल है? या अंतर है?
बेन सुटन

1
वास्तविक डेटासेट आकार को जानने के बिना कहना मुश्किल है (सूची आंतरिक रूप से ऐसे सरणियों का उपयोग करती है, जिनका विस्तार करने में सक्षम होना चाहिए। सरणियाँ अपरिवर्तनीय हैं।) यदि आप जानते हैं कि सूची आकार इस तरह से बढ़ा तो प्रदर्शन में थोड़ा सुधार हो सकता है ... लेकिन लाभ आपको इतना छोटा होने वाला है। साथ ही उस संस्करण का उपयोग कर सकते हैं जिसे आप बनाए रखना चाहते हैं।
मैथ्यू व्हिट जूल 5'12

3
क्या आपने देखा है कि यह धागा 6 साल पुराना है? (और मेरा दूसरा उत्तर सीधे Arrayइसके बजाय का उपयोग करने के अपने उदाहरण को संभालता है int[]।)
मैथ्यू Whited

66

दिलचस्प बात यह है कि कोई भी इस सवाल का जवाब नहीं देता है, लेकिन ओपी जोरदार टाइप्ड int[]लेकिन ए का उपयोग नहीं कर रहा है Array

आपको Arrayवास्तव में जो है, उसे डालना है int[], फिर आप इसका उपयोग कर सकते हैं ToList:

List<int> intList = ((int[])ints).ToList();

ध्यान दें कि सूची निर्माता कोEnumerable.ToList कॉल करता है जो पहले जांचता है कि क्या तर्क को (जो एक सरणी को लागू करता है) में डाला जा सकता है , तो वह अनुक्रम को एन्यूमरेट करने के बजाय अधिक कुशल विधि का उपयोग करेगा ।ICollection<T>ICollection<T>.CopyTo


11
धन्यवाद, Enum.GetValuesएक ऐरे को लौटाता है और इससे मुझे एक सूची बनाने में मदद मिली।
मार्टिन ब्रॉन

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

27

सबसे सरल विधि है:

int[] ints = new [] { 10, 20, 10, 34, 113 };

List<int> lst = ints.ToList();

या

List<int> lst = new List<int>();
lst.AddRange(ints);

7
काम करने के using System.Linq;लिए एक की जरूरत है ToList()
जारेक्जेक

यह काम नहीं करता है Array। आपको इसे कास्ट करने या .Cast<>पहले कॉल करने की आवश्यकता है ।
ब्लूराजा -

11

मामले में आप सूची की एक सरणी वापस करना चाहते हैं एक सूची के रूप में आप निम्नलिखित कर सकते हैं।

using System.Linq;

public List<DayOfWeek> DaysOfWeek
{
  get
  {
    return Enum.GetValues(typeof(DayOfWeek))
               .OfType<DayOfWeek>()
               .ToList();
  }
}

5

आप मूल रूप से इस तरह कर सकते हैं:

int[] ints = new[] { 10, 20, 10, 34, 113 };

यह आपकी सरणी है, और आप अपनी नई सूची को इस तरह से कॉल कर सकते हैं:

 var newList = new List<int>(ints);

आप इसे जटिल ऑब्जेक्ट के लिए भी कर सकते हैं।


4

vb.net में बस यही करें

mylist.addrange(intsArray)

या

Dim mylist As New List(Of Integer)(intsArray)

2
theType का उपयोग करने से बेहतर है <> (मेरा VS2010 कुछ भी स्वीकार नहीं करेगा ...)
woohoo

3

आप इसे अपने कोड में आज़मा सकते हैं:

Array ints = Array.CreateInstance(typeof(int), 5);
ints.SetValue(10, 0);

ints.SetValue(20, 1);
ints.SetValue(10, 2);
ints.SetValue(34, 3);
ints.SetValue(113, 4);

int[] anyVariable=(int[])ints;

तो आप बस अपने कोड के रूप में anyVariable का उपयोग कर सकते हैं।



0

मुझे आशा है कि यह मददगार है।

enum TESTENUM
    {
        T1 = 0,
        T2 = 1,
        T3 = 2,
        T4 = 3
    }

स्ट्रिंग मान प्राप्त करें

string enumValueString = "T1";

        List<string> stringValueList =  typeof(TESTENUM).GetEnumValues().Cast<object>().Select(m => 
            Convert.ToString(m)
            ).ToList();

        if(!stringValueList.Exists(m => m == enumValueString))
        {
            throw new Exception("cannot find type");
        }

        TESTENUM testEnumValueConvertString;
        Enum.TryParse<TESTENUM>(enumValueString, out testEnumValueConvertString);

पूर्णांक मान प्राप्त करें

        int enumValueInt = 1;

        List<int> enumValueIntList =  typeof(TESTENUM).GetEnumValues().Cast<object>().Select(m =>
            Convert.ToInt32(m)
            ).ToList();

        if(!enumValueIntList.Exists(m => m == enumValueInt))
        {
            throw new Exception("cannot find type");
        }

        TESTENUM testEnumValueConvertInt;
        Enum.TryParse<TESTENUM>(enumValueString, out testEnumValueConvertInt);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.