সি # তে সাব-লিস্ট কীভাবে পাবেন


91

আমার একটি আছে List<String>এবং এই তালিকা থেকে আমার একটি সাবলিস্ট নেওয়া দরকার। .NET 3.5 এ জন্য তালিকার কোন পদ্ধতি উপলব্ধ?


আপনি কি আমাদের একটি কোড নমুনা প্রদর্শন করতে পারেন, বা পরিষ্কার করতে পারেন? আমি প্রশ্ন অনুসরণ করছি না।
ডেভিড

আমার কাছে একটি তালিকা আছে বলে তালিকা <স্ট্রিং> তালিকা = নতুন তালিকা <স্ট্রিং> (); আমাকে এই তালিকা থেকে একটি উপ তালিকা বাছাই করতে হবে সূচি 2 থেকে দৈর্ঘ্য -1 এ বলা
টমাস মানালিল

উত্তর:


131

আপনি তালিকাটি চান: getRange (ফার্স্ট ইনডেক্স, গণনা)। Http://msdn.microsoft.com/en-us/library/21k0e39c.aspx দেখুন

// I have a List called list
List sublist = list.GetRange(5, 5); // (gets elements 5,6,7,8,9)
List anotherSublist = list.GetRange(0, 4); // gets elements 0,1,2,3)

আপনি কি এই পরে আছেন?

আপনি যদি মূল তালিকা থেকে সাবলিস্ট আইটেমগুলি মুছতে চাইছেন তবে আপনি তা করতে পারেন:

// list is our original list
// sublist is our (newly created) sublist built from GetRange()
foreach (Type t in sublist)
{
    list.Remove(t);
}

4
ফোরচ দিয়ে পুনরাবৃত্তি করার সময় আপনি তালিকা থেকে আইটেমগুলি সরাতে পারবেন না .....!
স্লাগস্টার

স্লাগস্টার; তালিকা 'এ' থেকে মুছে ফেলার সময় আমি তালিকা 'বি' দিয়ে পুনরাবৃত্তি করছি। এটি আইনী :)
জোশ

6

আপনার তালিকায় একটি লিনকিউ ক্যোয়ারী চালানো যেমন সহজ হবে?

List<string> mylist = new List<string>{ "hello","world","foo","bar"};
List<string> listContainingLetterO = mylist.Where(x=>x.Contains("o")).ToList();

4
এটি মূল তালিকার অংশটির অনুলিপি, মূল তালিকার কোনও অংশের উপর দৃষ্টিভঙ্গি নয়।
আসাদ সা Saeedদুদ্দিন

@ আসাদ এই উত্তরের মূল বিষয়টি তুলে ধরেছিল যে ওপি লিনকিউ ব্যবহার করতে পারে। আপনি চিহ্নিত করেছেন যে এটি একটি অনুলিপি তৈরি করে। কল্পনাপ্রসূত। আপনার মেধা সম্ভবত এই প্রশ্নটি সম্পাদনা করার ক্ষেত্রে পয়েন্টটি আরও সূক্ষ্ম হিসাবে ব্যবহার করা যেতে পারে যা আমি 5.5 বছর আগে রেখেছিলাম। আপনি যদি এটি সম্পাদনা করেন তবে আপনি পেডেন্ট্রির ইন্টারনেট ন্যায়বিচার লিগে ক্রেডিট পাবেন এবং এটি ভাল উপার্জন হবে!
পি.কম্পবেল

11
আমি ( অন্য কিছু লোকের মতো ) subListজাভা থেকেও অনুরূপ কিছু খুঁজছিলাম যা মূল তালিকার মধ্যে একটি পরিবর্তনীয় দৃষ্টিভঙ্গি প্রকাশ করে। এটি ভিন্নভাবে আচরণ করে, যা অবিলম্বে সুস্পষ্ট নাও হতে পারে, তাই আমি ভেবেছিলাম যে এটি পরে দেখবে তার উপকারের জন্য এটি উল্লেখ করা সহায়ক হবে। বিষয়বস্তু, আপনি যোগ বা ধ্যান বা কিছু গ্রহণ করতে চাইতে পারেন; আপনি কোনও প্ররোচনা ছাড়াই রেড-ইন-দ্য-মুখের উন্মাদ হয়ে গেছেন।
আসাদ সাইদুদ্দিন

3

লিনকিউ থেকে হিয়ার ক্লজটি ব্যবহার করুন:

List<object> x = new List<object>();
x.Add("A");
x.Add("B");
x.Add("C");
x.Add("D");
x.Add("B");

var z = x.Where(p => p == "A");
z = x.Where(p => p == "B");

উপরের বিবৃতিতে "পি" হ'ল তালিকায় থাকা অবজেক্টটি। সুতরাং আপনি যদি কোনও ডেটা অবজেক্ট ব্যবহার করেন, যেমন:

public class Client
{
    public string Name { get; set; }
}

তাহলে আপনার লিঙ্কটি দেখতে এই রকম হবে:

List<Client> x = new List<Client>();
x.Add(new Client() { Name = "A" });
x.Add(new Client() { Name = "B" });
x.Add(new Client() { Name = "C" });
x.Add(new Client() { Name = "D" });
x.Add(new Client() { Name = "B" });

var z = x.Where(p => p.Name == "A");
z = x.Where(p => p.Name == "B");

আপনি বিশদ দেওয়ার পরে, আমার প্রথম উদাহরণটি ব্যবহার করুন এবং এটি যুক্ত করুন: z = x.GetRange (1, 3); x. রিমুভেরেঞ্জ (1, 3); x.AddRange (z.OrderByDescending (p => p));
স্লাগস্টার

2

লিনকিউ সহ:

List<string> l = new List<string> { "1", "2", "3" ,"4","5"};
List<string> l2 = l.Skip(1).Take(2).ToList();

আপনার যদি ভবিষ্যদ্বাণী প্রয়োজন, তবে টোললিস্টের প্রয়োজন নেই:

foreach (string s in l.Skip(1).Take(2)){}

লিনকিউয়ের সুবিধা হ'ল আপনি যদি কিছু শীর্ষস্থানীয় উপাদান এড়িয়ে যেতে চান তবে আপনি করতে পারেন:

List<string> l2 = l.Skip(1).ToList();
foreach (string s in l.Skip(1)){}

অর্থাত গণনা / দৈর্ঘ্য ইত্যাদির যত্ন নেওয়ার দরকার নেই


0

আপনার সংগ্রহ শ্রেণিতে এমন একটি পদ্ধতি থাকতে পারে যা ফিল্টার সংজ্ঞায়িত করার জন্য পাস করা মানদণ্ডের উপর ভিত্তি করে সংগ্রহ (একটি উপ তালিকা) প্রদান করে। ফরচ লুপের সাহায্যে একটি নতুন সংগ্রহ তৈরি করুন এবং এটি পাস করুন।

অথবা, পদ্ধতিটি এবং লুপটিতে একটি "ফিল্টারড" বা "সক্রিয়" পতাকা (সম্পত্তি) সেট করে বিদ্যমান সংগ্রহটি সংশোধন করুন। এইটি কাজ করতে পারে তবে বহুবিবাহিত কোডে সমস্যা হতে পারে। অন্যান্য বিষয়বস্তু সংগ্রহের বিষয়বস্তুর উপর নির্ভর করে যদি আপনি ডেটা কীভাবে ব্যবহার করেন তার উপর নির্ভর করে এটি হয় ভাল বা খারাপ।


0

উপ-তালিকায় আইটেমগুলি বিপরীত করুন

int[] l = {0, 1, 2, 3, 4, 5, 6};
var res = new List<int>();
res.AddRange(l.Where((n, i) => i < 2));
res.AddRange(l.Where((n, i) => i >= 2 && i <= 4).Reverse());
res.AddRange(l.Where((n, i) => i > 4));

0,1,4,3,2,5,6 দেয়


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