আমি কীভাবে কমা দ্বারা পৃথক স্ট্রিংকে একটি তালিকা <int> এ রূপান্তর করতে পারি


199
string tags = "9,3,12,43,2"

List<int> TagIds = tags.Split(',');

এটি কাজ করে না কারণ বিভক্ত পদ্ধতিটি একটি স্ট্রিং দেয় []



উত্তর:


432

এটি করার একটি উপায় এখানে:

List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();

11
এটিও হতে পারেList<int> TagIds = new List<int>(tags.Split(',').Select(int.Parse));
ফুগ

2
এর কি দরকার আছে new List<>?
লিকুইডপনি

2
@ লিকুইডপনি নং; আপনি ToList()পরিবর্তে কল করতে পারে ; ফলাফলটি মূলত একই: List<int> TagIds = tags.Split(',').Select(int.Parse).ToList(); আপনার একটি বা অন্যটি করা দরকার, যদিও এর ফিরতি মূল্য Select()হ'ল একটি IEnumerable<>, তবে একটি নয়List<>
ফুগ

এই প্রয়োগের @ লিকুইডপনি হ্যাঁ Selectএই ক্ষেত্রে এক্সটেনশানটি ফিরে আসায় IEnumerable<Int32>এবং এটি তালিকাভুক্ত নয়। তবে তালিকার একজন কনস্ট্রাক্টর রয়েছে যা উত্স হিসাবে অন্য সংগ্রহকে গ্রহণ করে।
ওয়বিক

8
ট্যাগগুলি খালি স্ট্রিং হ'ল ক্ষেত্রেটি হ্যান্ডেল করতেSplit(new char[] {','}, StringSplitOptions.RemoveEmptyEntries)
TrueWill

24

আপনি যদি কিছু সাধারণ বৈধতা অন্তর্ভুক্ত করতে চান এবং অবৈধ মানগুলি (একটি ব্যতিক্রম ছোঁড়ার পরিবর্তে) বাদ দেন তবে ট্রাইপার্স ব্যবহার করে এমন কিছু এখানে রয়েছে:

string csv = "1,2,3,4,a,5";
int mos = 0;
var intList = csv.Split(',')
                    .Select(m => { int.TryParse(m, out mos); return mos; })
                    .Where(m => m != 0)
                    .ToList();

//returns a list with integers: 1, 2, 3, 4, 5

সম্পাদনা: এন্টোইনের প্রতিক্রিয়ার ভিত্তিতে এখানে একটি আপডেট করা ক্যোয়ারী রয়েছে। এটি কোনও খারাপ মান ফিল্টার করার জন্য প্রথমে ট্রিপ পার্সিকে কল করে এবং তারপরে প্রকৃত রূপান্তরটি করতে পার্সকে বলে।

string csv = "1,2,3,4,a,5,0,3,r,5";
int mos = 0;
var intList = csv.Split(',')
                    .Where(m => int.TryParse(m, out mos))
                    .Select(m => int.Parse(m))
                    .ToList();

//returns a list with integers: 1, 2, 3, 4, 5, 0, 3, 5

সম্পাদনা 2: সি # 7.0 এর জন্য একটি আপডেট হওয়া ক্যোয়ারী, চার্লস বার্নসের প্রতিক্রিয়ার জন্য ধন্যবাদ। নোট করুন যে আমরা এই পদ্ধতির সাহায্যে অতিরিক্ত মোশ ভেরিয়েবল থেকে মুক্তি পেয়েছি, তাই এটি কিছুটা পরিষ্কার।

string csv = "1,2,3,4,a,5,0,3,r,5";
var intList = csv.Split(',')
                 .Where(m => int.TryParse(m, out _))
                 .Select(m => int.Parse(m))
                 .ToList();

1
0 যদি একটি বৈধ ইনপুট হয় ব্যর্থ হয়!
এন্টোইন মেল্টেজহেম

2
সি # 7.0 এর সাহায্যে আপনি মোস এর ঘোষণাকে বাদ দিতে পারেন এবং ট্রাই পার্সির কলটি এর সাথে প্রতিস্থাপন করতে পারেনint.TryParse(m, out int _)
চার্লস বার্নস

14

আপনি লিনিকিউ ডাব্লু / ব্যবহার করতে পারেন এটিকে int.Parse()রূপান্তর string[]করতে IEnumerable<int>এবং তারপরে ফলাফলটি List<T>কনস্ট্রাক্টরে পাস করতে পারেন :

var tagIds = new List<int>(tags.Split(',').Select(s => int.Parse(s)));


6

লিনকুইয়ের জিজ্ঞাসা ছাড়াই আপনি এই পদ্ধতিটি চয়ন করতে পারেন,

string tags = "9,3,12,43,2";
List<string> numbers = nos.Split(',').ToList<string>();

এবং তারপরে আপনি এই তালিকাটিকে পূর্ণসংখ্যার ধরণে রূপান্তর করতে পারেন ...


অপরিচিত কারও কাছে কেবল একটি নোট = .ToList<string>()এখনও প্রয়োজনusing System.Linq;
বিল রাওলিনসন

4
string tags = "9,3,12,43,2"

List<int> TagIds = tags.Split(',').Select(x => x.Trim()).Select(x=> Int32.Parse(x)).ToList();

2
ডকস.মাইক্রোসফট.এইন.ইউএস / ডটনেট / সিএসআরপি / প্রগ্রামগ্রামিং-গাইড / টাইপস / ৮ এর মতে আপনার যোগ করার দরকার নেই .Select(x => x.Trim(), কারণ পার্স স্বয়ংক্রিয়ভাবে আপনার জন্য কোনও স্থানের অক্ষর ছাঁটাই করে
ফিলিপ কুইনলান

2

আপনি যদি সি # 3.5 ব্যবহার করেন তবে এটি অর্জনের জন্য আপনি লিনক ব্যবহার করতে পারেন

string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(s=>int.Parse(s)).ToList();

বা সংক্ষিপ্ত এক

string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(int.Parse).ToList();


1

আমি খালিদ 13 এর উত্তরে একটি পরিবর্তন করেছি। যদি ব্যবহারকারী "0" এর স্ট্রিং রাখেন তবে তার উত্তর ফলাফলের তালিকা থেকে তা সরিয়ে ফেলবে। আমি অনুরূপ কিছু করেছি তবে একটি বেনামি বস্তু ব্যবহার করেছি।

var result = commaSeparatedString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
            .Select(s => new { didConvert = int.TryParse(s.TrimNullProtection(), out convertedInt), convertedValue = convertedInt })
            .Where(w => w.didConvert)
            .Select(s => s.convertedValue)
            .ToList();

ট্রিমনলপ্রোটেকশন হ'ল একটি কাস্টম ফাংশন যা আমি স্ট্রিংটি শূন্য থাকলে সুরক্ষিত করে।

উপরেরটি যা করে তা হ'ল যে কোনও স্ট্রিংগুলি কোনও ত্রুটি ছাড়াই রূপান্তরিত করতে সক্ষম ছিল না। যদি রূপান্তরটিতে কোনও সমস্যা হয় তবে আপনার যদি ত্রুটির প্রয়োজন হয় তবে গ্রহণযোগ্য উত্তরটি কৌশলটি করা উচিত।


1

আমি এতে হোঁচট খেয়েছি এবং আমি লিনক ছাড়াই নিজের সমাধানটি ভাগ করতে চাই। এটি একটি আদিম পদ্ধতি। অ-পূর্ণসংখ্যার মানগুলিও তালিকায় যুক্ত হবে না।

List<int> TagIds = new List<int>();
string[] split = tags.Split(',');
foreach (string item in split)
{
    int val = 0;
    if (int.TryParse(item, out val) == true)
    {
        TagIds.Add(val);
    }
}

আশাকরি এটা সাহায্য করবে.


-2

ইহা সহজ. প্রথমে স্ট্রিংটি বিভক্ত করুন। কমা (,) এর পরে ফাঁকা স্থানটি ট্রিম করুন। তারপরে ToList সংজ্ঞায়িত সিস্টেমটি ব্যবহার করুন ()

string TradeTypeEnum = "Physical Deal, Physical Concentrate"

',' এর পরে স্থানটি সরাতে এবং এই কমা বিচ্ছিন্ন পাঠ্যটিকে তালিকায় রূপান্তর করতে

List<string> IDs = (TradeTypeEnum.Split(',')).Select(t => t.Trim()).ToList();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.