কীভাবে তালিকা <স্ট্রিং> কে তালিকায় <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);
}

উত্তর:


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

ব্যতিক্রম উত্থাপিত - লিনকিউ সংস্থাগুলি 'ইন্ট 32 ইনডেক্স অফ (চর)' পদ্ধতিটি স্বীকৃতি দেয় না এবং এই পদ্ধতির কোনও স্টোর এক্সপ্রেশনে অনুবাদ করা যায় না।
.NET

4
@ markthewizard1234 যে যদি আপনার ঘটবে listofIDsএকটি হল IQueryable<string>যে মৃত্যুদন্ড কার্যকর করা হয় নি। ToList()আপনি রূপান্তর করার আগে প্রথমে এটি সম্পাদন করুন :listofIDs.ToList().Select(int.Parse).ToList()
মাইকেল হর্নফেক

আমি নিশ্চিত 2013 এ কাজ করেছে তবে এটি আমার পক্ষে আর কাজ করে না। লিনাক স্টেটমেন্টটি ব্যবহার করে নীচে একটি নতুন বিকল্প যুক্ত করা হয়েছে।
ব্র্যান্ডন টার্পি 2'18

1
যদি কোনও স্ট্রিং আসলে অন্তর্নির্মিত না হয় তবে এটি ব্যতিক্রম করবে। নীচে নিরাপদ সংস্করণগুলি দেখুন। stackoverflow.com/a/48712010/2340825
বিএ TabNabber

@ মিশেল হর্নফেক প্রথম টোললিস্টটি অসমাপ্ত হতে হবে, দ্বিতীয় তালিকা বরাদ্দ করার দরকার নেই
রোনান থাইবাডাউ

38

লিনক ব্যবহার করা হচ্ছে ...

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

20

এখানে একটি নিরাপদ বৈকল্পিক যা অবৈধ ইনটগুলি ফিল্টার করে:

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

এটি outসি # 7.0 এর সাথে প্রবর্তিত নতুন ভেরিয়েবলগুলি ব্যবহার করে ।

এই অন্যান্য রূপটি nullঅবৈধ ints (যেমন এটি মূল তালিকার গণনা সংরক্ষণ করে) জন্য প্রবেশের প্রবেশ করানো হয় এমন নালাগুলি ইনটগুলির একটি তালিকা ফেরত দেয় :

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

দুর্দান্ত ধন্যবাদ! সংস্করণ সি # 6.0 নীচের জন্য stackoverflow.com/a/48712010/2340825
বিএ TabNabber


12

কোন ট্রাই পার্সে কি? নিরাপদ লিনকিউ সংস্করণ যা অবৈধ ইনটগুলি ফিল্টার করে (সি # 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 => কিছু ম্যাথোদ (এক্স) । আপনি কি জানেন যে আপনার সম্ভবত এটি কোনও ম্যাথডের সাথে প্রতিস্থাপন করা উচিত । এটির সাথে আপনার উদাহরণটি তালিকার তালিকায় পরিণত হয় <<স্ট্রিং, ইন্ট> (কনভার্ট.টোইন্ট 32) নির্বাচন করুন; । এটি সম্ভবত আরও পাঠযোগ্য, দ্রুত, খাটো এবং আমি ইতিমধ্যে আরও মার্জিত উল্লেখ করেছি? এই প্রশ্নের উত্তর দেওয়া অন্য সকলের ক্ষেত্রে একই।
জেবিএসএনরোরো

তীর সিনট্যাক্স বাদ দিলে আমি একটি ত্রুটি পাচ্ছি। এটি কাজ করে: 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সংস্করণগুলির মধ্যে দ্ব্যর্থক কল ।
goodeye

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

এটি সম্পাদন করার আরেকটি উপায় হচ্ছে লিনাক স্টেটমেন্ট ব্যবহার করা। পুনরায় পুনরুদ্ধার করা উত্তরটি আমার জন্য কাজ করে নি। নেট কোর 2.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

আপনি এটি লিনকুইয়ের মাধ্যমে ব্যবহার করতে পারেন

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

ট্রাইপার্সে বেশ অপব্যয়কর বলে মনে হচ্ছে, যা আপনাকে মান দেয়, তারপরে পার্স করার জন্য কেবল সেই মানটি উইন্ডোটির বাইরে ফেলে দিন। আপনি মূলত ডাবল পার্সিং করছেন।
রিস্টোগড


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()

হাই প্যাট্রিক স্ট্যাকওভারফ্লোতে আপনাকে স্বাগতম। আপনি পোস্ট করেছেন যে সুন্দর সংক্ষিপ্ত সমাধান সম্পর্কে আপনি আরও কিছু বিবরণ লিখতে পারলে ভাল হয়। এটি এই ওয়েবসাইটে খুব পুরানো প্রশ্নের উত্তর এবং বেশ কয়েকটি ব্যবহারকারী পর্যালোচনা করবেন।
আদিত্য
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.