लिस्ट <string> को लिस्ट <int> में कैसे बदलें?


157

मेरा सवाल इस समस्या का हिस्सा है:

मैं एक फॉर्म से आईडी का संग्रह प्राप्त करता हूं। मुझे चाबियाँ प्राप्त करने की आवश्यकता है, उन्हें पूर्णांक में परिवर्तित करें और डीबी से मिलान रिकॉर्ड का चयन करें।

[HttpPost]
public ActionResult Report(FormCollection collection)
{
    var listofIDs = collection.AllKeys.ToList();  
    // List<string> to List<int>
    List<Dinner> dinners = new List<Dinner>();
    dinners= repository.GetDinners(listofIDs);
    return View(dinners);
}

जवाबों:


391
listofIDs.Select(int.Parse).ToList()

अपवाद उठाया गया - LINQ to Entities विधि 'Int32 IndexOf (चार)' विधि को मान्यता नहीं देता है, और इस पद्धति का स्टोर अभिव्यक्ति में अनुवाद नहीं किया जा सकता है। .net 4.0
markthewizard1234

4
@ markthewizard1234 है कि अगर आपकी क्या होगा listofIDsएक है IQueryable<string>किया है कि निष्पादित नहीं किया गया। ToList()रूपांतरण करने से पहले इसे पहले निष्पादित करें :listofIDs.ToList().Select(int.Parse).ToList()
माइकल हॉर्नफेक

2013 में Im यकीन है कि यह काम किया है, लेकिन यह अब मेरे लिए काम किया है। Linq statement का उपयोग करके नीचे एक नया विकल्प जोड़ा गया।
ब्रैंडन टर्की

1
यह एक अपवाद को फेंक देगा यदि कोई भी तार वास्तव में स्याही नहीं है। नीचे सुरक्षित संस्करण देखें। stackoverflow.com/a/48712010/2340825
BA TabNabber

@ मिचेलहॉर्नफ़ेक पहला टॉयलेट असिम्बल होना चाहिए, दूसरी सूची आवंटित करने की आवश्यकता नहीं है
रॉनन थिबुडौ

38

Linq का उपयोग कर रहा है ...

List<string> listofIDs = collection.AllKeys.ToList();  
List<int> myStringList = listofIDs.Select(s => int.Parse(s)).ToList();

20

यहां एक सुरक्षित संस्करण है जो अमान्य ints को फ़िल्टर करता है:

List<int> ints = strings
    .Select(s => Int32.TryParse(s, out int n) ? n : (int?)null)
    .Where(n => n.HasValue)
    .Select(n => n.Value)
    .ToList();

यह outC # 7.0 के साथ पेश किए गए नए चर का उपयोग करता है ।

यह अन्य संस्करण अशक्त ints की एक सूची देता है, जहाँ nullप्रविष्टियाँ अवैध इन्ट्स के लिए डाली जाती हैं (अर्थात यह मूल सूची गणना को सुरक्षित रखता है):

List<int?> nullableInts = strings
    .Select(s => Int32.TryParse(s, out int n) ? n : (int?)null)
    .ToList();

बहुत धन्यवाद! सी # 6.0 के नीचे संस्करण stackoverflow.com/a/48712010/2340825
BA TabNabber


12

क्या कोई TryParse है? सुरक्षित LINQ संस्करण जो अमान्य ints (C # 6.0 और नीचे के लिए) को फ़िल्टर करता है:

List<int>  ints = strings
    .Select(s => { int i; return int.TryParse(s, out i) ? i : (int?)null; })
    .Where(i => i.HasValue)
    .Select(i => i.Value)
    .ToList();

विचार और सी # 7.0 संस्करण के लिए ओलिवियर जैकोट-डेसकोम्बर्स को श्रेय।


3

मुझे पता है कि यह पुरानी पोस्ट है, लेकिन मुझे लगा कि यह एक अच्छा जोड़ है: आप इसका उपयोग कर सकते हैं List<T>.ConvertAll<TOutput>

List<int> integers = strings.ConvertAll(s => Int32.Parse(s));

1

यह सबसे आसान तरीका है, मुझे लगता है:

var listOfStrings = (new [] { "4", "5", "6" }).ToList();
var listOfInts = listOfStrings.Select<string, int>(q => Convert.ToInt32(q));

6
मैं इस तरह के पैटर्न को लैम्ब्डा के भावों में अक्सर देखता हूं : x => someMethod (x) । आप जानते हैं कि आपको कुछ मैथोड के साथ संभवतः प्रतिस्थापित करना चाहिए । इसके साथ आपका उदाहरण listOfStrings.Select <string, int> (Convert.ToInt32) बन जाता है ; । यह शायद अधिक पठनीय, तेज, छोटा है और क्या मैंने पहले से अधिक सुरुचिपूर्ण उल्लेख किया है? वही इस सवाल का जवाब देने वाले अन्य सभी के लिए जाता है।
JBSnorro

तीर सिंटैक्स को छोड़ते समय मुझे एक त्रुटि मिल रही है। यह काम करता है: List<string> sss = new List<string>(); IEnumerable<int> test1 = sss.Select<string, int>(x => Convert.ToInt32(x));लेकिन यह नहीं करता है: IEnumerable<int> test2 = sss.Select<string, int>(Convert.ToInt32);त्रुटि के बीच अस्पष्ट कॉल है string,int,intऔर string,intचयन के संस्करणों।
गोडेई

1

स्ट्रिंग मान को पूर्णांक सूची में बदलें

var myString = "010"; 
int myInt;
List<int> B = myString.ToCharArray().Where(x => int.TryParse(x.ToString(), out myInt)).Select(x => int.Parse(x.ToString())).ToList();

0

इसे पूरा करने का एक अन्य तरीका एक लाइनक स्टेटमेंट का उपयोग करना होगा। पुनःप्राप्त उत्तर मेरे लिए .NetCore2.0 में काम नहीं किया। मैं यह पता लगाने में सक्षम था लेकिन अगर आप नई तकनीक का उपयोग कर रहे हैं तो नीचे भी काम करेगा।

[HttpPost]
public ActionResult Report(FormCollection collection)
{
    var listofIDs = collection.ToList().Select(x => x.ToString());
    List<Dinner> dinners = new List<Dinner>();
    dinners = repository.GetDinners(listofIDs);
    return View(dinners);
}

0

आप इसे LINQ के माध्यम से उपयोग कर सकते हैं

     var selectedEditionIds = input.SelectedEditionIds.Split(",").ToArray()
                            .Where(i => !string.IsNullOrWhiteSpace(i) 
                             && int.TryParse(i,out int validNumber))
                            .Select(x=>int.Parse(x)).ToList();

TryParse के लिए बहुत बेकार लगता है, जो आपको मूल्य देता है, तो बस उस मूल्य को खिड़की से बाहर फेंक दें फिर एक पार्स करें। आप अनिवार्य रूप से डबल पार्सिंग कर रहे हैं।
रिस्तोगोड २ '


0

इस साधारण समस्या के लिए यह ओवरकिल हो सकता है। लेकिन लिनक के संबंध में ट्राई-डू के तरीकों के लिए, मैं अधिक अभिव्यंजक कोड के लिए अनाम कक्षाओं का उपयोग करता हूं। यह ओलिवियर जैकोट-डेसकोम्बर्स और बीए तबनाबर के उत्तरों के समान है :

List<int> ints = strings
    .Select(idString => new { ParseSuccessful = Int32.TryParse(idString, out var id), Value = id })
    .Where(id => id.ParseSuccessful)
    .Select(id => id.Value)
    .ToList();

-1
  public List<int> ConvertStringListToIntList(List<string> list) 
  {
     List<int> resultList = new List<int>();
     for (int i = 0; i < list.Count; i++)
        resultList.Add(Convert.ToInt32(list[i]));

     return resultList;
  }

3
केवल कोड प्रदान करने के बजाय, अपने उत्तर के बारे में कुछ पाठ्य विवरण जोड़ने पर विचार करें।
कार्लोफैजीरा जूल

-1
yourEnumList.Select(s => (int)s).ToList()

हाय पटरीक। StackOverflow में आपका स्वागत है। यह बेहतर होगा यदि आप अपने द्वारा पोस्ट किए गए सुंदर संक्षिप्त समाधान के बारे में थोड़ा और विवरण लिख सकें। यह इस वेबसाइट पर एक बहुत पुराने प्रश्न का उत्तर है और कई उपयोगकर्ताओं द्वारा समीक्षा की जाएगी।
आदित्य
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.