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


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.