স্ট্রিনগুলি সংহত করতে লিনকিউ ব্যবহার করা হচ্ছে


345

পুরাতন-স্কুলটি লেখার সর্বাধিক দক্ষ উপায় কী:

StringBuilder sb = new StringBuilder();
if (strings.Count > 0)
{
    foreach (string s in strings)
    {
        sb.Append(s + ", ");
    }
    sb.Remove(sb.Length - 2, 2);
}
return sb.ToString();

... লিনকুতে?


1
আপনি কি জিনিসগুলি করার জন্য অন্য কোনও দুর্দান্ত শীতল LINQ উপায় আবিষ্কার করেছেন?
রবার্ট এস

3
ভাল নির্বাচিত উত্তর এবং অন্যান্য সমস্ত অপশন লিনক টু সত্তাগুলিতে কাজ করে না।
বিনোজ অ্যান্টনি

3
@ বিনোজ অ্যান্টনি, আপনার ডাটাবেসটিকে স্ট্রিং কনটেনটেশন করবেন না।
অ্যামি বি

6
@ Pr0fess0rX: কারণ এটি পারে না এবং কারণ এটি করা উচিত নয়। আমি অন্যান্য ডাটাবেসগুলি সম্পর্কে জানি না তবে এসকিউএল সার্ভারে আপনি কেবল কনট্যাট (এন) বারকাহার করতে পারেন যা আপনাকে (এন) ভারচার (সর্বাধিক) সীমাবদ্ধ করে। এটি করা উচিত নয় কারণ ব্যবসায়ের যুক্তি ডেটা স্তরে প্রয়োগ করা উচিত নয়।
the_drow

পূর্ণ উত্স কোড এবং উচ্চ কার্যকারিতা সহ কোনও চূড়ান্ত সমাধান?
কিকিনেট

উত্তর:


527

এই উত্তরটিতে Aggregateপ্রশ্নের অনুরোধ অনুসারে লিনকিউ ( ) এর ব্যবহার দেখায় এবং এটি প্রতিদিনের ব্যবহারের উদ্দেশ্যে নয়। কারণ এটি কোনও ব্যবহার করে না StringBuilderএটিতে খুব দীর্ঘ সিকোয়েন্সগুলির জন্য ভয়ঙ্কর অভিনয় থাকবে। String.Joinঅন্যান্য উত্তর হিসাবে প্রদর্শিত হিসাবে নিয়মিত কোড ব্যবহারের জন্য

এই জাতীয় সামগ্রিক জিজ্ঞাসা ব্যবহার করুন:

string[] words = { "one", "two", "three" };
var res = words.Aggregate(
   "", // start with empty string to handle empty list case.
   (current, next) => current + ", " + next);
Console.WriteLine(res);

এই ফলাফলগুলি:

, এক দুই তিন

একটি সমষ্টি একটি হ'ল ফাংশন যা মান সংগ্রহ করে এবং একটি মাপকের মান দেয় returns টি-এসকিউএল থেকে প্রাপ্ত উদাহরণগুলির মধ্যে ন্যূনতম, সর্বাধিক এবং যোগফল থাকে। ভিবি এবং সি # উভয়েরই সমষ্টিগুলির পক্ষে সমর্থন রয়েছে। ভিবি এবং সি # উভয়ই সম্প্রসারণের পদ্ধতি হিসাবে একত্রিত করে। ডট-স্বরলিপি ব্যবহার করে, একটি সহজেই আইইনুমেবল অবজেক্টে একটি পদ্ধতি কল করে ।

মনে রাখবেন যে সমষ্টিগত অনুসন্ধানগুলি তাত্ক্ষণিকভাবে কার্যকর করা হবে।

আরও তথ্য - এমএসডিএন: সামগ্রিক ক্যোয়ারী


আপনি যদি কোডমনিকিং-এর মন্তব্যে প্রস্তাবিত Aggregateব্যবহার করে যদি সত্যই ব্যবহার করতে চান যা বিপুল সংখ্যক অবজেক্টের জন্য ভাল পারফরম্যান্স সহ নিয়মিত হিসাবে একই কোড সম্পর্কিত হবে :StringBuilderString.Join

 var res = words.Aggregate(
     new StringBuilder(), 
     (current, next) => current.Append(current.Length == 0? "" : ", ").Append(next))
     .ToString();

4
প্রথম উদাহরণটি "এক, দুই, তিন" আউটপুট দেয় না, এটি ", এক, দুই, তিন" আউটপুট দেয় (অগ্রণী কমা লক্ষ করুন)।
মর্ট করুন

আপনার প্রথম উদাহরণে, যেহেতু আপনি বীজ করেছেন "", প্রথম মানটি currentএকটি খালি স্ট্রিং। সুতরাং, 1 বা ততোধিক উপাদানগুলির জন্য, আপনি সর্বদা , স্ট্রিংয়ের শুরুতে পাবেন ।
মাইকেল ইয়ানি

@ মর্ট আমি এটি স্থির করেছি
সার্জটেক

358
return string.Join(", ", strings.ToArray());

নেট 4 এ, এটি গ্রহণ করার জন্য একটি নতুন ওভারলোড রয়েছে । কোডটি এর পরে দেখতে হবে:string.JoinIEnumerable<string>

return string.Join(", ", strings);

2
ঠিক আছে, সুতরাং সমাধানটি লিনক ব্যবহার করে না, তবে এটি আমার কাছে বেশ ভালভাবে কাজ করছে বলে মনে হচ্ছে
ম্যাট রবার্টস

33
টুআরাই লিনাক :)
অ্যামি বি

18
এটি সবচেয়ে সঠিক উত্তর। এটি প্রশ্ন এবং স্বীকৃত উত্তর উভয়ের চেয়ে দ্রুত এবং এটিগ্রিগেটের চেয়ে অনেক বেশি পরিষ্কার, এটি প্রতিবার ব্যবহৃত হওয়ার সাথে সাথে অনুচ্ছেদের দীর্ঘ ব্যাখ্যা প্রয়োজন।
PRMan

@ রিয়ালপ্রো সম্পূর্ণ মিথ্যা false github.com/microsoft/references Source/blob/master/mscorlib/… লাইন 161
অ্যামি বি

125

কেন লিনক ব্যবহার করবেন?

string[] s = {"foo", "bar", "baz"};
Console.WriteLine(String.Join(", ", s));

এটি নিখুঁতভাবে কাজ করে এবং IEnumerable<string>যতদূর আমার মনে আছে তা গ্রহণ করে। Aggregateএখানে খুব দরকার নেই যা অনেক ধীর।


19
লিনকিউ শেখা দুর্দান্ত হতে পারে, এবং লিনকিউ শেষটি অর্জনের দুর্দান্ত উপায় হতে পারে তবে লিনিকউ ব্যবহারের ফলস্বরূপ ফলাফলটি পাওয়া খারাপ হতে পারে, কমপক্ষে বলতে গেলে যদি একেবারে বোকা না হয়
জেসন বুটিং

9
.NET 4.0 একটি IEnumerable <স্ট্রিং> এবং IEnumrable <টি> জমিদার, যা এটি অনেক সহজ ব্যবহার করতে করতে হবে
সিনে

3
সিনেমাটি যেমন উল্লেখ করেছে, .NET 4.0 এর ওভারলোড রয়েছে। পূর্ববর্তী সংস্করণ না। আপনি এখনও String.Join(",", s.ToArray())পুরানো সংস্করণগুলিতে পারেন ।
মার্টিজন

1
অবগতির জন্য: থেকে মার্জ করা হয়েছে stackoverflow.com/questions/122670/...
Shog9

@ শোগ 9 মার্জ করা উত্তরগুলি এখানে সদৃশ প্রচেষ্টার মতো দেখায় এবং টাইমস্ট্যাম্পগুলি কোনওভাবেই সহায়তা করে না .. এখনও যাওয়ার পথ।
নওফাল

77

আপনি কি সমষ্টি সম্প্রসারণ পদ্ধতিটি দেখেছেন?

var sa = (new[] { "yabba", "dabba", "doo" }).Aggregate((a,b) => a + "," + b);

23
এটি সম্ভবত স্ট্রিং.জয়েন () এর চেয়ে ধীর এবং কোডে পড়া আরও শক্ত। "লিনকু ওয়ে" এর জন্য প্রশ্নের উত্তর দেয়, যদিও :-)
ক্রিস ওয়েনহ্যাম

5
হ্যাঁ, আমি আমার মতামত দিয়ে উত্তরটি দাগ দিতে চাইনি। : পি
রবার্ট এস।

2
নিঃসন্দেহে এটি বেশ খানিকটা ধীর। এমনকি কনগ্রিটেশনের পরিবর্তে স্ট্রিংবিল্ডারের সাথে সমষ্টি ব্যবহার স্ট্রিং.জয়িনের চেয়ে ধীর।
জোয়েল মুয়েলার 20

4
10.000.000 পুনরাবৃত্তির সাহায্যে একটি পরীক্ষা করা হয়েছে, সমষ্টিগতভাবে ৪.৩ সেকেন্ড এবং স্ট্রিং.জয়েন ২.৩ সেকেন্ড নিয়েছে। সুতরাং আমি বলব পারফ পার্থক্যটি 99% সাধারণ ব্যবহারের ক্ষেত্রে গুরুত্বহীন। সুতরাং আপনি যদি ইতিমধ্যে আপনার ডেটা প্রক্রিয়াকরণের জন্য প্রচুর লিনক করছেন, সাধারণত সেই চমৎকার বাক্য গঠনটি ভাঙার এবং স্ট্রিং.জইন ইমো ব্যবহার করার দরকার নেই। gist.github.com/joeriks/5791981
joeriks

1
অবগতির জন্য: থেকে মার্জ করা হয়েছে stackoverflow.com/questions/122670/...
Shog9

56

আমার কোড থেকে বাস্তব উদাহরণ:

return selected.Select(query => query.Name).Aggregate((a, b) => a + ", " + b);

একটি ক্যোয়ারী এমন একটি অবজেক্ট যার নাম সংস্থান রয়েছে যা একটি স্ট্রিং, এবং আমি নির্বাচিত তালিকার সমস্ত প্রশ্নের নাম কমা দ্বারা পৃথক করতে চাই।


2
পারফরম্যান্স সম্পর্কে মন্তব্যগুলি দেওয়া, আমার যুক্ত করা উচিত যে উদাহরণটি কোড থেকে শুরু করে যা একবারে একটি ডায়লগ বন্ধ হয়ে যায় এবং তালিকাটিতে প্রায় দশটি স্ট্রিং থাকার সম্ভাবনা নেই!
ড্যানিয়েল আর্উইকার

লিনক টু সত্তা থেকে এই একই কাজটি কীভাবে করা যায় তার কোনও সূত্র?
বিনোজ অ্যান্টনি

1
দুর্দান্ত উদাহরণ। এটি একটি বাস্তব বিশ্বের দৃশ্যে রাখার জন্য আপনাকে ধন্যবাদ। আমার ঠিক একই পরিস্থিতি ছিল, একটি অবজেক্টের সম্পত্তি সহ যা শেষ করতে হবে।
Jessy Houle

1
আমার তালিকার স্ট্রিং সম্পত্তি নির্বাচন করার প্রথম অংশটি সনাক্ত করতে আমাকে সহায়তা করার জন্য উত্সাহিত <T>
নিককি 9696

1
বৃহত্তর অ্যারের সাথে এই কাছাকাছি পারফরম্যান্স সম্পর্কে লিখুন।
জিউলিও ক্যাক্সিন

31

এখানে অন্যান্য উত্তর এবং অনুরূপ প্রশ্নে সম্বোধিত সমস্যাগুলি দেখার পরে আমি সমঝোতার / লিনক পদ্ধতির সমাধান করেছি (যথা 0 উপাদানগুলির সাথে সমষ্টি এবং সংঘর্ষ ব্যর্থ হয়)।

string Result = String.Join(",", split.Select(s => s.Name));

বা (যদি sস্ট্রিং না হয়)

string Result = String.Join(",", split.Select(s => s.ToString()));

  • সহজ
  • সহজ পড়তে ও বুঝতে
  • জেনেরিক উপাদানগুলির জন্য কাজ করে
  • অবজেক্টস বা অবজেক্ট প্রোপার্টি ব্যবহার করার অনুমতি দেয়
  • 0 দৈর্ঘ্যের উপাদানগুলির কেস পরিচালনা করে
  • অতিরিক্ত লিঙ্ক ফিল্টারিংয়ের সাথে ব্যবহার করা যেতে পারে
  • ভাল অভিনয় (কমপক্ষে আমার অভিজ্ঞতায়)
  • StringBuilderপ্রয়োগ করার জন্য কোনও অতিরিক্ত বস্তুর (ম্যানুয়াল) তৈরির প্রয়োজন নেই

এবং অবশ্যই জয়েন পেসকি চূড়ান্ত কমাটির যত্ন নেয় যা কখনও কখনও অন্যান্য পদ্ধতির ( for, foreach) এ স্নেহ করে , যে কারণে আমি প্রথমে একটি লিনক সমাধানের সন্ধান করছিলাম।


1
মিস ম্যাচ করা প্রথম বন্ধনী।
ctrl-alt-delor

1
অবগতির জন্য: থেকে মার্জ করা হয়েছে stackoverflow.com/questions/122670/...
Shog9

3
আমি এই উত্তরটি পছন্দ করি কারণ এর .Select()মতো ব্যবহার করা এই ক্রিয়াকলাপের সময় প্রতিটি উপাদানকে সংশোধন করার জন্য একটি সহজ জায়গা সরবরাহ করে। উদাহরণস্বরূপ, প্রতিটি আইটেমকে এমন কোনও চরিত্রে মোড়ানোstring Result = String.Join(",", split.Select(s => "'" + s + "'"));
স্যাম স্টোরি

29

আপনি ব্যবহার করতে পারেন StringBuilderমধ্যে Aggregate:

  List<string> strings = new List<string>() { "one", "two", "three" };

  StringBuilder sb = strings
    .Select(s => s)
    .Aggregate(new StringBuilder(), (ag, n) => ag.Append(n).Append(", "));

  if (sb.Length > 0) { sb.Remove(sb.Length - 2, 2); }

  Console.WriteLine(sb.ToString());

( Selectআপনি আরও লিনকিউ স্টাফ করতে পারেন তা দেখানোর জন্য এটি সেখানে রয়েছে))


2
+1 দুর্দান্ত। তবে আইএমও এর পরে মুছে ফেলার চেয়ে অতিরিক্ত "," যোগ করা এড়ানো ভাল। এরকম কিছুnew[] {"one", "two", "three"}.Aggregate(new StringBuilder(), (sb, s) =>{if (sb.Length > 0) sb.Append(", ");sb.Append(s);return sb;}).ToString();
dss539

5
আপনি if (length > 0)লিনকটি পরীক্ষা না করে এবং এটি বের করে মূল্যবান ঘড়িচক্রটি সংরক্ষণ করতে পারেন।
বিনোজ অ্যান্টনি

1
আমি dss539 এর সাথে একমত আমার সংস্করণটিnew[] {"", "one", "two", "three"}.Aggregate(new StringBuilder(), (sb, s) => (String.IsNullOrEmpty(sb.ToString())) ? sb.Append(s) : sb.Append(", ").Append(s)).ToString();
প্রোফিনিম্রোড

22

স্ট্রিংবিল্ডার বনাম সিলেক্ট এবং 3000 এরও বেশি উপাদানের উপরে দ্রুত পারফরম্যান্স ডেটা:

ইউনিট পরীক্ষা - সময়কাল (সেকেন্ড)
LINQ_S
স্ট্রিংবিল্ডার - 0.0036644

    [TestMethod()]
    public void LINQ_StringBuilder()
    {
        IList<int> ints = new List<int>();
        for (int i = 0; i < 3000;i++ )
        {
            ints.Add(i);
        }
        StringBuilder idString = new StringBuilder();
        foreach (int id in ints)
        {
            idString.Append(id + ", ");
        }
    }
    [TestMethod()]
    public void LINQ_SELECT()
    {
        IList<int> ints = new List<int>();
        for (int i = 0; i < 3000; i++)
        {
            ints.Add(i);
        }
        string ids = ints.Select(query => query.ToString())
                         .Aggregate((a, b) => a + ", " + b);
    }

এর জন্য
লিনকিউবিহীন

4
সময়ের পার্থক্যটি সম্ভবত স্ট্রিংবিল্ডার বনাম স্ট্রিং কনক্যাটিনেশন + ব্যবহার করে। লিনকিউ বা সমষ্টিগত কিছু করার নেই। স্ট্রিংবিল্ডারকে লিনকিউ সমষ্টিতে রাখুন (এসও তে প্রচুর উদাহরণ) এবং এটি ঠিক তত দ্রুত হওয়া উচিত।
কন্ট্রোলবক্স

16

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

public static string JoinAsString<T>(this IEnumerable<T> input, string seperator)
{
    var ar = input.Select(i => i.ToString()).ToArray();
    return string.Join(seperator, ar);
}

5
string.Joinনেট 4 এ ইতিমধ্যে যে IEnumerable<T>কোনও স্বেচ্ছাসেবীর জন্য একটি নিতে পারে T
পুনরাবৃত্তি

1
অবগতির জন্য: থেকে মার্জ করা হয়েছে stackoverflow.com/questions/122670/...
Shog9

12

' সুপার-কুল লিনকু ওয়ে'-র মাধ্যমে আপনি সম্ভবত কথা বলছেন যেভাবে লিনকুই এক্সটেনশন পদ্ধতির ব্যবহারের সাথে ফাংশনাল প্রোগ্রামিংকে অনেক বেশি স্বচ্ছল করে তোলে। আমার অর্থ, সিনট্যাকটিক চিনি যা ফাংশনগুলিকে বাসা বাঁধার পরিবর্তে (একের পর এক) দর্শনীয় রৈখিক উপায়ে (একের পর এক) আবদ্ধ করতে দেয়। উদাহরণ স্বরূপ:

int totalEven = Enumerable.Sum(Enumerable.Where(myInts, i => i % 2 == 0));

এভাবে লেখা যেতে পারে:

int totalEven = myInts.Where(i => i % 2 == 0).Sum();

দ্বিতীয় উদাহরণটি কীভাবে পড়া সহজ তা আপনি দেখতে পারেন। আপনি কীভাবে আরও কম ক্রিয়াকলাপ সংযোজন সংক্রান্ত সমস্যাগুলির সাথে কম যোগ করতে পারেন বা লিসি ক্লোজিং পেরেনগুলি এক্সপ্রেশনটির শেষে উপস্থিত হবে তাও দেখতে পারেন ।

অন্যান্য উত্তরগুলির মধ্যে অনেকগুলি বলে যে String.Joinএটিই যাওয়ার উপায় কারণ এটি পড়ার পক্ষে দ্রুত বা সহজতম। তবে আপনি যদি আমার ' সুপার-কুল লিনকু ওয়ে ' এর ব্যাখ্যাটি নেন তবে উত্তরটি ব্যবহার String.Joinকরা হবে তবে এটি একটি লিনকিউ স্টাইলের এক্সটেনশন পদ্ধতিতে আবৃত রয়েছে যা আপনাকে দৃষ্টিভঙ্গিমূলক উপায়ে আপনার ক্রিয়াকলাপগুলিকে শৃঙ্খলিত করতে দেয়। সুতরাং আপনি যদি লিখতে চান তবে sa.Concatenate(", ")এই জাতীয় কিছু তৈরি করতে হবে:

public static class EnumerableStringExtensions
{
   public static string Concatenate(this IEnumerable<string> strings, string separator)
   {
      return String.Join(separator, strings);
   }
}

এটি এমন কোড সরবরাহ করবে যা সরাসরি কল হিসাবে অন্তত পারফরম্যান্ট (কমপক্ষে অ্যালগোরিদম জটিলতার ক্ষেত্রে) এবং কিছু ক্ষেত্রে কোডটি আরও পঠনযোগ্য করে তুলতে পারে (প্রসঙ্গে নির্ভর করে) বিশেষত যদি ব্লকের অন্য কোডগুলি শিকলযুক্ত ফাংশন শৈলী ব্যবহার করে ।


1
এই থ্রেডে টাইপগুলির সংখ্যা ক্রেজি: বিভাজক => বিভাজক, কনক্যাটিনেট => কনক্যাটেনেট
সিলভারসাইডডাউন

1
অবগতির জন্য: থেকে মার্জ করা হয়েছে stackoverflow.com/questions/122670/...
Shog9


5

এখানে এটি একটি একক অভিব্যক্তি হিসাবে খাঁটি লিনকিউ ব্যবহার করছে:

static string StringJoin(string sep, IEnumerable<string> strings) {
  return strings
    .Skip(1)
    .Aggregate(
       new StringBuilder().Append(strings.FirstOrDefault() ?? ""), 
       (sb, x) => sb.Append(sep).Append(x));
}

এবং এর সুন্দর অভিশাপ দ্রুত!


3

আমি কিছুটা প্রতারণা করতে যাচ্ছি এবং এর একটি নতুন উত্তর ফেলতে যাচ্ছি যা মনে হয় এটি একটি মন্তব্যের ভিতরে এটি স্টিক না করে এখানে সর্বোত্তম কিছু যোগ করে sum

সুতরাং আপনি এই এক লাইন করতে পারেন:

List<string> strings = new List<string>() { "one", "two", "three" };

string concat = strings        
    .Aggregate(new StringBuilder("\a"), 
                    (current, next) => current.Append(", ").Append(next))
    .ToString()
    .Replace("\a, ",string.Empty); 

সম্পাদনা: আপনি হয় প্রথমে খালি গণনার জন্য যাচাই করতে চান বা .Replace("\a",string.Empty);এক্সপ্রেশনটির শেষে যুক্ত করতে চান। অনুমান করুন আমি সম্ভবত খুব স্মার্ট হওয়ার চেষ্টা করছিলাম।

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


2

আপনি লিনকিউ এবং string.join()বেশ কার্যকরভাবে একত্রিত করতে পারেন । এখানে আমি একটি স্ট্রিং থেকে একটি আইটেম অপসারণ করছি। এটি করার আরও ভাল উপায় রয়েছে তবে এটি এখানে রয়েছে:

filterset = String.Join(",",
                        filterset.Split(',')
                                 .Where(f => mycomplicatedMatch(f,paramToMatch))
                       );

1
অবগতির জন্য: থেকে মার্জ করা হয়েছে stackoverflow.com/questions/122670/...
Shog9

1

এখানে প্রচুর পছন্দ। আপনি লিনকুই এবং একটি স্ট্রিংবিল্ডার ব্যবহার করতে পারেন যাতে আপনি পারফরম্যান্সটিও এর মতো পান:

StringBuilder builder = new StringBuilder();
List<string> MyList = new List<string>() {"one","two","three"};

MyList.ForEach(w => builder.Append(builder.Length > 0 ? ", " + w : w));
return builder.ToString();

builder.Length > 0ফরইচ-তে পরীক্ষা না করা এবং ফোরিচ-এর পরে প্রথম কমাটি সরিয়ে দ্রুত করা হবে
বিনোজ অ্যান্টনি

1

লিনক ব্যবহার করে আইআইএস লগ ফাইলটি বিশ্লেষণ করার সময় আমি নিম্নলিখিত তাত্ক্ষণিক ও নোংরা কাজটি করেছি, এটি 1 মিলিয়ন লাইনে কাজ করেছে বেশ ভাল (15 সেকেন্ড), যদিও 2 মিলিয়ন লাইনের চেষ্টা করার পরে মেমরির ত্রুটি থেকে মুক্তি পেয়েছে।

    static void Main(string[] args)
    {

        Debug.WriteLine(DateTime.Now.ToString() + " entering main");

        // USED THIS DOS COMMAND TO GET ALL THE DAILY FILES INTO A SINGLE FILE: copy *.log target.log 
        string[] lines = File.ReadAllLines(@"C:\Log File Analysis\12-8 E5.log");

        Debug.WriteLine(lines.Count().ToString());

        string[] a = lines.Where(x => !x.StartsWith("#Software:") &&
                                      !x.StartsWith("#Version:") &&
                                      !x.StartsWith("#Date:") &&
                                      !x.StartsWith("#Fields:") &&
                                      !x.Contains("_vti_") &&
                                      !x.Contains("/c$") &&
                                      !x.Contains("/favicon.ico") &&
                                      !x.Contains("/ - 80")
                                 ).ToArray();

        Debug.WriteLine(a.Count().ToString());

        string[] b = a
                    .Select(l => l.Split(' '))
                    .Select(words => string.Join(",", words))
                    .ToArray()
                    ;

        System.IO.File.WriteAllLines(@"C:\Log File Analysis\12-8 E5.csv", b);

        Debug.WriteLine(DateTime.Now.ToString() + " leaving main");

    }

আমি লিনক ব্যবহারের আসল কারণটি আমার আগে প্রয়োজন হওয়া একটি পৃথকীকরণের জন্য ছিল:

string[] b = a
    .Select(l => l.Split(' '))
    .Where(l => l.Length > 11)
    .Select(words => string.Format("{0},{1}",
        words[6].ToUpper(), // virtual dir / service
        words[10]) // client ip
    ).Distinct().ToArray()
    ;

1
অবগতির জন্য: থেকে মার্জ করা হয়েছে stackoverflow.com/questions/122670/...
Shog9

0

কিছুক্ষণ আগে আমি এই সম্পর্কে ব্লগ করেছি, আপনি যা খুঁজছেন ঠিক সেভাবেই আমি কী করলাম:

http://ondevelopment.blogspot.com/2009/02/string-concatenation-made-easy.html

ব্লগ পোস্টে বর্ণনা করুন যে কীভাবে এক্সটেনশন পদ্ধতিগুলি কার্যকর করা যায় যা IEnumerable এ কাজ করে এবং নামকরণ করা হয় কনক্যাটেনেট, এটি আপনাকে এই জাতীয় জিনিস লিখতে দেয়:

var sequence = new string[] { "foo", "bar" };
string result = sequence.Concatenate();

বা আরও বিস্তৃত জিনিস যেমন:

var methodNames = typeof(IFoo).GetMethods().Select(x => x.Name);
string result = methodNames.Concatenate(", ");

1
অবগতির জন্য: থেকে মার্জ করা হয়েছে stackoverflow.com/questions/122670/...
Shog9

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