একই ধরণের আইটেমগুলির সাথে তালিকার একটি তালিকা আইটেমের একক তালিকায় কীভাবে মার্জ করবেন?


209

প্রশ্নটি বিভ্রান্তিকর, তবে নিম্নলিখিত কোডগুলিতে বর্ণিত হিসাবে এটি আরও স্পষ্ট:

   List<List<T>> listOfList;
   // add three lists of List<T> to listOfList, for example
   /* listOfList = new {
        { 1, 2, 3}, // list 1 of 1, 3, and 3
        { 4, 5, 6}, // list 2
        { 7, 8, 9}  // list 3
        };
   */
   List<T> list = null;
   // how to merger all the items in listOfList to list?
   // { 1, 2, 3, 4, 5, 6, 7, 8, 9 } // one list
   // list = ???

নিশ্চিত না যে সি # লিনকু বা ল্যাম্বদা ব্যবহার করে এটি সম্ভব কিনা?

মূলত, আমি কীভাবে তালিকার তালিকাটিকে সংযুক্ত করতে বা " সমতল " করতে পারি ?

উত্তর:


455

সিলেক্টম্যানি এক্সটেনশন পদ্ধতিটি ব্যবহার করুন

list = listOfList.SelectMany(x => x).ToList();

73
আমি অবাক হই যে কতজন লোক তাদের নিজস্ব "ফ্ল্যাটেন" এক্সটেনশন লিখেছেন তা বুঝতে না পেরে সিলেক্টম্যানি কীভাবে কাজ করে?
জেমস শেক

1
এটি কাজ করার জন্য কেন x => এক্স দরকার? আমি সাধারণত x => x +1 এর মতো জিনিসগুলি দেখতে পাই তবে x => x নয়।
সুইমবাইকআরুন

9
@ সুইমবাইকরুন সিলেক্টম্যানি টিএসোসর্সের একটি আইনিংরেবল নিতে, তালিকার প্রতিটি টিসোর্সকে ট্রাইসোল্টের একটি আইইনামেবলে রূপান্তর করতে, তারপরে সেই সমস্ত আইমনামেবলকে একটি বড় হিসাবে রূপান্তর করতে ব্যবহৃত হয়। এই ক্ষেত্রে আপনার তালিকার একটি তালিকা শুরু করতে হবে, তাই যদি আপনি কোনও টিএসোর্স (যা ট্রাইসাল্টের একটি মূলনাম) থেকে মানচিত্রের ফাংশনকে সম্মতি দিতে চান তবে ট্রাইসাল্টের একটি আইয়ানমিউরেবলের পরিচয় ফাংশন (x => x)। এটি সত্যিই কেবল একটি বিশেষ ক্ষেত্রে যেখানে প্রতিটি টিএসোর্সকে তালিকায় পরিণত করার অতিরিক্ত ধাপের দরকার নেই, কারণ এটি ইতিমধ্যে একটি তালিকা।
শান

@ জারেডপার আমরা <যুক্ত <তালিকা <তালিকা <টি> >> তে তালিকায় এই যুক্তি প্রয়োগ করতে পারি?
1993

4
@ তুষারকুকরেতি অবশ্যই, স্রেফ ব্যবহার করুনlist.SelectMany(x => x.SelectMany(y => y)).ToList();
ব্র্যান্ডন ক্রামার

13

এখানে সি # ইন্টিগ্রেটেড সিনট্যাক্স সংস্করণ:

var items =
    from list in listOfList
    from item in list
    select item;

সামান্য বিভ্রান্তিকর, কিন্তু দুর্দান্ত। এইটা কিভাবে? Var আইটেম = মধ্যে আইটেম থেকে (listOflist নির্বাচন তালিকায় তালিকা থেকে) আইটেম নির্বাচন করুন
David.Chu.ca

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

3
"লিনকিউ সিলেক্টম্যানি মোনাদ" গুগল করার সময় কোটগুলি অন্তর্ভুক্ত করবেন না বা এটি আপনাকে এখানে ফিরে যেতে সরাসরি নির্দেশ করবে।
অক্সিন

12

আপনি এই মানে?

var listOfList = new List<List<int>>() {
    new List<int>() { 1, 2 },
    new List<int>() { 3, 4 },
    new List<int>() { 5, 6 }
};
var list = new List<int> { 9, 9, 9 };
var result = list.Concat(listOfList.SelectMany(x => x));

foreach (var x in result) Console.WriteLine(x);

ফলাফল স্বরূপ: 9 9 9 1 2 3 4 5 6


অথবা আপনি বিদ্যমান তালিকায় মার্জ হওয়া আইটেমগুলি যুক্ত করতে কনক্যাট () এর পরিবর্তে তালিকাটি যুক্ত করুন Aএড্রেঞ্জ () যোগ করতে পারেন।
dahlbyk

1

জন্য List<List<List<x>>>ইত্যাদি, ব্যবহার

list.SelectMany(x => x.SelectMany(y => y)).ToList();

এটি একটি মন্তব্যে পোস্ট করা হয়েছে, তবে এটি আমার মতে পৃথক উত্তর প্রাপ্য।

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