লিনকিউ ব্যবহার করে <স্ট্রিং> তালিকার সমস্ত স্ট্রিং কনক্যাট করুন


542

ডিলিমিটার চরিত্রের সাথে আমার সম্পূর্ণ List<string>সংগ্রহের আইটেমগুলিকে এককভাবে সংযুক্ত করার জন্য কি সহজ লিনকিউ এক্সপ্রেশন আছে string?

সংগ্রহটি যদি কাস্টম অবজেক্টের পরিবর্তে হয় তবে stringকী হবে ? ভাবুন আমার সাথে কথা বলা দরকার object.Name।


37
কেন লিনাক এবং স্ট্রিং নয়? জয়েন ()?
— অ্যালান

14
স্ট্রিং.জয়িন আরও ভাল তবে আমার মনে হয় লিনাক আপনার কোডটিকে মজাদার করে তোলে, এ কারণেই হতে পারে!
— আলী এরশেজ

14
স্ট্রিং.জয়িন আরও ভাল কারণ এটি একটি স্ট্রিংবিল্ডার ব্যবহার করে এবং বারবার সংশ্লেষণের উত্তরাধিকারী ও (এন ^ 2) এর কার্যকারিতা এড়ায়।
— কেনেট বেলেনকি

1
লিনকিউ ব্যবহারের ক্ষেত্রে পারফরম্যান্স সমস্যা?
— প্রিগ্যান্টকোজোনিরো ক্যাব্রন

উত্তর:


524

লিনকিউ ব্যবহার করে এটি কাজ করা উচিত;

string delimiter = ",";
List<string> items = new List<string>() { "foo", "boo", "john", "doe" };
Console.WriteLine(items.Aggregate((i, j) => i + delimiter + j));

শ্রেণীর বিবরণ:

public class Foo
{
    public string Boo { get; set; }
}

ব্যবহার:

class Program
{
    static void Main(string[] args)
    {
        string delimiter = ",";
        List<Foo> items = new List<Foo>() { new Foo { Boo = "ABC" }, new Foo { Boo = "DEF" },
            new Foo { Boo = "GHI" }, new Foo { Boo = "JKL" } };

        Console.WriteLine(items.Aggregate((i, j) => new Foo{Boo = (i.Boo + delimiter + j.Boo)}).Boo);
        Console.ReadKey();

    }
}

এবং এখানে আমার সেরা :)

items.Select(i => i.Boo).Aggregate((i, j) => i + delimiter + j)

40
ও (এন ^ 2) সময় আবার ধর্মঘট করে।
— কেনেট বেলেনকি

2
আপনি যদি সামগ্রিক পদ্ধতিটি দেখতে না পান তবে আপনাকে System.Linq ব্যবহার করে যুক্ত করতে হবে;
— সিড্রিক গিলমেট

6
সমস্যাটি হ'ল উপরের লিনকিউ পদ্ধতিটি খালি বা একক উপাদান তালিকার সাথে কাজ করে না।
— আলেকজান্ডার

2
আইটেমগুলি খালি থাকলে এটি একটি অবৈধপ্রকাশের ধারণাটি ফেলে দেবে।
— 2xMax

10
শুধু স্ট্রিং.জাইন ব্যবহার করবেন না কেন? শেদাটের উত্তরটি গ্রহণ করুন যাতে শেডাতের সবচেয়ে ভাল পছন্দ হলে কোনও ভিড়ের মধ্যে কেউ এই সমাধানটি বেছে না নেয়।
— স্কাইচান

966

.NET 4.0 বা পরবর্তী সংস্করণগুলিতে:

String.Join(delimiter, list);

পর্যাপ্ত.


91
আমি সবাই লিনকিউ সমাধানের জন্য তবে এটি লিনকিউ এবং সমষ্টি () পদ্ধতির চেয়ে বেশি দক্ষ।
— andleer

17
অনেক ক্লিনার! আমার জন্য দুর্দান্ত কাজ! string.Join ( ",", accs.Select (এক্স => x.AccountID) .ToArray ()),
— m4tt1mus

32
@ কনস্টান্টিনসালাভতভ ওপি স্পষ্ট করে দেওয়ার আগে আমার উত্তর পোস্ট করে দিয়েছিল যে এটি লিনিক্যুতে থাকতে হবে। গুগলে একটি "প্রয়োজনীয়-লাইন-লিনকিউ" সমাধানের সন্ধানের জন্য যারা এই উত্তরে প্রবেশ করবে তার পক্ষে এটি এখনও পুরোপুরি বৈধ। এই প্রসঙ্গে "উত্তর কার্যকর নয়" সম্পর্কিত অন্যায্য is
— সেদাত কাপানোগলু

7
এটি <String>তালিকাগুলি ব্যতীত অন্য কিছুর জন্যও ব্যবহার করা যেতে পারে এবং ToString () পদ্ধতিতে কল করবে।
— কিয়ান

এটি যদি ডেটাবেজে যাওয়ার কোনও ক্যোয়ারী হয় তবে কাজ করে না। এটি কেবল স্মৃতিতে কাজ করে।
— আলানসিকিরা 27

124

এটি স্ট্রিং অ্যারের জন্য:

string.Join(delimiter, array);

এটি একটি তালিকার জন্য <স্ট্রিং>:

string.Join(delimiter, list.ToArray());

এবং এটি কাস্টম অবজেক্টের তালিকার জন্য:

string.Join(delimiter, list.Select(i => i.Boo).ToArray());

25
স্ট্রিং.জয়িনের একটি ওভারলোড রয়েছে যা একটি আইনিউমারেবল লাগে, সুতরাং আপনার তোআরআর () কলের প্রয়োজন নেই
— arolson101

9
মনে রাখবেন আইইনামেবল ওভারলোড কেবলমাত্র 4.0 বা তার পরে বিদ্যমান। যদি আপনি কোনও পুরানো সংস্করণ ব্যবহার করেন তবে আপনার এখনও টোআরে () লাগবে।
— Rakuen42

2
আহ! এই শেষ ওভারলোডটি আমি খুঁজছিলাম। আমি জানতাম একটি নির্দিষ্ট সম্পত্তি তোলার উপায় আছে। :)
— মাইক Devenney

56
using System.Linq;

public class Person
{
  string FirstName { get; set; }
  string LastName { get; set; }
}

List<Person> persons = new List<Person>();

string listOfPersons = string.Join(",", persons.Select(p => p.FirstName));

26

ভাল প্রশ্ন. আমি ব্যবহার করছি

List<string> myStrings = new List<string>{ "ours", "mine", "yours"};
string joinedString = string.Join(", ", myStrings.ToArray());

এটি লিনকুই নয়, তবে এটি কার্যকর।


কেন আপনাকে কল করতে হবে .ToArray ()?
— Г И І И О

কারণ ২০০৯ সালের খারাপ ওলে দিনগুলিতে, স্ট্রিং.জয়িনের এমন কোনও এক্সটেনশন ছিল না যা কোনও আইএনওমারেবল গ্রহণ করেছিল।
— জ্যাকব প্রোফিট


7

আমি মনে করি আপনি যদি কোনও এক্সটেনশান পদ্ধতিতে যুক্তিটি সংজ্ঞায়িত করেন তবে কোডটি আরও বেশি পঠনযোগ্য হবে:

public static class EnumerableExtensions { 
  public static string Join<T>(this IEnumerable<T> self, string separator) {  
    return String.Join(separator, self.Select(e => e.ToString()).ToArray()); 
  } 
} 

public class Person {  
  public string FirstName { get; set; }  
  public string LastName { get; set; }  
  public override string ToString() {
    return string.Format("{0} {1}", FirstName, LastName);
  }
}  

// ...

List<Person> people = new List<Person>();
// ...
string fullNames = people.Join(", ");
string lastNames = people.Select(p => p.LastName).Join(", ");

6

আপনি কেবল ব্যবহার করতে পারেন:

List<string> items = new List<string>() { "foo", "boo", "john", "doe" };

Console.WriteLine(string.Join(",", items));

শুভ কোডিং!


3

আমি লিনকিউ ব্যবহার করে এটি করেছি:

var oCSP = (from P in db.Products select new { P.ProductName });

string joinedString = string.Join(",", oCSP.Select(p => p.ProductName));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.