আমি কীভাবে তালিকার তালিকা থেকে তালিকাগুলি অনুলিপি করতে পারি?


318

আমি কীভাবে Listসি # তে একের মধ্যে থাকা আইটেমগুলি অন্যটিতে স্থানান্তর করব foreach?


3
: আপনি মূল তালিকার একটি গভীর ক্লোন প্রয়োজন যদি আপনি এই সংশ্লিষ্ট প্রশ্নে উত্তর পাবেন stackoverflow.com/questions/222598/...
ডির্ক Vollmar

উত্তর:


554

আপনি এটি চেষ্টা করতে পারেন:

List<Int32> copy = new List<Int32>(original);

অথবা আপনি যদি লিনকের সাথে সি # 3 এবং .NET 3.5 ব্যবহার করেন তবে আপনি এটি করতে পারেন:

List<Int32> copy = original.ToList();

14
আইটেমগুলি MyClassপরিবর্তে প্রকারভেদ থাকলে Integer, এটি কী আইটেমগুলি খুব কপি করে, বা কেবল তাদের রেফারেন্স করে?
পেড্রো মোরেইরা

5
অ-আদিম ধরণের সাথে কাজ করছে না। তালিকা <স্টুডেন্টক্লাস> অনুলিপি = নতুন তালিকা <স্টুডেন্টক্লাস> (# স্টুডেন্টক্লাস);
চটকদার

4
এটা সব ধরনের সঙ্গে কাজ করে, যতদিন lstStudentClassএকজন IEnumerable<StudentClass>, এটা কাজ করবে। আপনি যদি অন্যথায় অভিজ্ঞতা পান তবে আপনাকে আরও তথ্য সরবরাহ করতে হবে।
লাসে ভি কার্লসেন

1
(মূল) এর অর্থ কী; শেষে
রাহুল চৌধারি

1
আপনি একটি সংগ্রহ তালিকার কনস্ট্রাক্টারে পাস করুন এবং কনস্ট্রাক্টর সেই সংকলনের সমস্ত উপাদানকে নতুন তৈরি তালিকায় অনুলিপি করবেন।
লাসে ভি কার্লসেন

170

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

targetList.AddRange(sourceList);

আপনি যদি কেবল তালিকার একটি নতুন অনুলিপি তৈরি করতে চান তবে লাসির উত্তর দেখুন।


6
@ মিঃমিলসি: আচ্ছা তারা বিভিন্ন কাজ করে। আমার উত্তরটি "আমার কাছে ইতিমধ্যে একটি তালিকা আছে এবং আমি এটিতে অনুলিপি করতে চাই"
স্কেট

সত্য। আমার প্রশ্নটি যাইহোক কোনও নতুন প্রশ্নের পক্ষে সম্ভবত আরও উপযুক্ত। যদিও উত্তর দেওয়ার জন্য ধন্যবাদ।
mrmillsy

1
আপনি যদি বিদ্যমান তালিকার বিষয়বস্তুগুলি সম্পূর্ণরূপে প্রতিস্থাপন করতে চান তবে আপনি টার্গেটলিস্টকে কল করুন lear ক্লিয়ার () প্রথমে।
ইব্রাহিম

33

উপাদানগুলির তালিকার জন্য

List<string> lstTest = new List<string>();

lstTest.Add("test1");
lstTest.Add("test2");
lstTest.Add("test3");
lstTest.Add("test4");
lstTest.Add("test5");
lstTest.Add("test6");

আপনি যদি সমস্ত উপাদান কপি করতে চান

List<string> lstNew = new List<string>();
lstNew.AddRange(lstTest);

আপনি যদি প্রথম 3 টি উপাদান অনুলিপি করতে চান

List<string> lstNew = lstTest.GetRange(0, 3);

5

এবং এটি হ'ল যদি কোনও একক সম্পত্তি অন্য তালিকায় অনুলিপি করা প্রয়োজন:

targetList.AddRange(sourceList.Select(i => i.NeededProperty));

4

এই পদ্ধতিটি আপনার তালিকার একটি অনুলিপি তৈরি করবে তবে আপনার ধরণটি সিরিয়ালযোগ্য হওয়া উচিত।

ব্যবহার করুন:

List<Student> lstStudent = db.Students.Where(s => s.DOB < DateTime.Now).ToList().CopyList(); 

পদ্ধতি:

public static List<T> CopyList<T>(this List<T> lst)
    {
        List<T> lstCopy = new List<T>();
        foreach (var item in lst)
        {
            using (MemoryStream stream = new MemoryStream())
            {
                BinaryFormatter formatter = new BinaryFormatter();
                formatter.Serialize(stream, item);
                stream.Position = 0;
                lstCopy.Add((T)formatter.Deserialize(stream));
            }
        }
        return lstCopy;
    }

সিরিয়ালাইজেশন কি একটি গুরুত্বপূর্ণ পারফরম্যান্স পেনাল্টি তৈরি করে?
ড্যান ডেফ

0

ঠিক আছে এটি ভালভাবে কাজ করছে উপরের পরামর্শগুলি থেকে getRange () আমার পক্ষে যুক্তি হিসাবে একটি তালিকা নিয়ে কাজ করে না ... সুতরাং উপরের পোস্টগুলি থেকে কিছুটা মিষ্টি করা: (সবাইকে ধন্যবাদ :)

/*  Where __strBuf is a string list used as a dumping ground for data  */
public List < string > pullStrLst( )
{
    List < string > lst;

    lst = __strBuf.GetRange( 0, __strBuf.Count );     

    __strBuf.Clear( );

    return( lst );
}

2
এটি এমনকি একটি উত্তর না।
ম্যাকিয়েজ জুরেস্কো

মিমি ... ঠিক আছে উপরের কিছু পরামর্শ কেবল ভিস 17 এ কাজ করে না আমি প্রদত্ত সেরা উত্তরটি সাফ করে দিয়েছি ... এবং হি প্রেস্টো ... এটি কাজ করে :)
জিম স্টিভেন্স

0

লুপ ছাড়াই লিনাক দ্বারা তালিকার বিভিন্ন সেট মানচিত্র করা সহজ

var List1= new List<Entities1>();

var List2= new List<Entities2>();

var List2 = List1.Select(p => new Entities2
        {
            EntityCode = p.EntityCode,
            EntityId = p.EntityId,
            EntityName = p.EntityName
        }).ToList();

-9

এখানে অন্য পদ্ধতি কিন্তু এটি অন্য তুলনায় কিছুটা খারাপ worse

List<int> i=original.Take(original.count).ToList();

24
তুমি ওটা কেন করবে? ToList()সরাসরি কেন নয় ?
নওফাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.