স্ট্রিং.জাইন পদ্ধতি যা খালি স্ট্রিংগুলিকে উপেক্ষা করে?


102

ভিবি.এনইটি পদ্ধতিটি String.Join(separator, stringArray)পিএইচপি-র ইমপ্লোডের অনুরূপ, তবে অ্যারের কোনও নাল উপাদান খালি স্ট্রিংয়ের সাথে প্রতিস্থাপিত হয়, যাতে:

Dim myArray() as String = { "a", null, "c" }
Console.WriteLine(String.Join(", ", myArray));
// Prints "a, , c"

খালি স্ট্রিংগুলিকে উপেক্ষা করে পৃথককারী দিয়ে স্ট্রিংয়ের একটি সেট সংযুক্ত করার জন্য কি সহজ উপায় আছে?

অ্যারে বা স্ট্রিং.জয়িন বা অন্য কিছু ব্যবহার করার দরকার নেই। আমার কেবল নিম্নলিখিত রূপান্তরগুলি দরকার:

("a", "b", "c") --> "a, b, c"
("a", null, "c") --> "a, c"

একটি সম্পূর্ণ ভিন্ন পদ্ধতির হিসাবে, এটি চমৎকার হতে পারে না একটি এক্সটেনশন পদ্ধতি .AddIfNotEmpty () তৈরি করে অ্যারেতে ফাঁকা বা খালি স্ট্রিং যোগ করার জন্য
জেমস ওয়েস্টগেট

@ জেমস ওয়েস্টগেট এটি কার্যকর পদ্ধতির উপর নির্ভর করে যে অ্যারেটি জনপথিত হয় এবং প্রোগ্রামটির অন্য কোনও অংশ অ্যারে ব্যবহার করছে কিনা তা নির্ভর করে।
স্টিয়ার্ট

উত্তর:


175

ভিবি.এনইটি

String.Join(",", myArray.Where(Function(s) Not String.IsNullOrEmpty(s)))

সি #

String.Join(",", myArray.Where(s => !string.IsNullOrEmpty(s)))


আমি একটি ত্রুটি পাচ্ছি: "'যেখানে' 'সিস্টেম.আর্রে' এর সদস্য নয়"। এবং আমি এমএসডিএন-তে 'কোথায়' সম্পর্কে কিছুই দেখতে পাচ্ছি না: এমএসডিএন.মাইক্রোসফটকম /en-us/library/system.array.aspx
ডগ

4
পরিবর্তে এর সাথে আমার কিছু ভাগ্য ছিল: Array.FindAll(myArray, Function(s) Not String.IsNullOrEmpty(s)) আপনি কি নিজের উত্তর পরিবর্তন করতে পারেন বা Whereবিবৃতিটি ব্যাখ্যা করতে পারেন ?
ডগ

7
Whereপদ্ধতি থেকে System.Linq, msdn.microsoft.com/en-us/library/bb534803.aspx
Damith

51

সি # ==> এর জন্য String.Join(",", arr.Where(s => !String.IsNullOrEmpty(s)));


4
গ্রহণযোগ্য উত্তর stackoverflow.com/a/16326071/461444 দুই বছর পরে ঠিক একই জিনিস পোস্ট করার উদ্দেশ্য কী ?
অগস্ট

10
@AFract: চেক করুন এই stackoverflow.com/posts/16326071/revisions পোস্টে আপনাকে উল্লেখ করেছে এই বছরের গোড়ার দিকে সম্পাদিত হয়েছে এবং যে সময়ে তারা C # এর জন্য মূল উত্তর এডেড নমুনা আপডেট
SharpCoder

3

এটি নেট .০.০ (কোনও লিনকিউ নয়) তে করার জন্য, যেমন এসকিউএল-সার্ভারের প্রতিবেদন সার্ভিসগুলির জন্য এটির জন্য কোনও ফাংশন না লিখে:

ভিবি.এনইটি

Dim a As String = "", b As String = "b", c As String = "", d As String = "d", e As String = ""
Dim lala As String = String.Join(" / ", String.Join(vbBack, New String() {a, b, c, d, e}).Split(New Char() {ControlChars.Back}, System.StringSplitOptions.RemoveEmptyEntries))

System.Console.WriteLine(lala)

সি # (যারা গুগল থেকে অবতরণ করছেন এবং ভিবি.এনইটি অনুসন্ধান করছেন না তাদের জন্য)

string a = "", b = "b", c = "", d = "d", e = "";
string lala = string.Join(" / ",
    string.Join("\u0008", 
        new string[] { a, b, c, d, e }
    ).Split(new char[] { '\u0008' }, System.StringSplitOptions.RemoveEmptyEntries)
);

System.Console.WriteLine(lala);

এটি ধরে নিয়েছে যে অক্ষর ব্যাকস্পেসটি আপনার স্ট্রিংগুলিতে ঘটে না (সাধারণত সত্য হওয়া উচিত, কারণ আপনি কেবল কীবোর্ড দ্বারা এই অক্ষরটি প্রবেশ করতে পারবেন না)।

এছাড়াও, যদি আপনি কোনও ডাটাবেস থেকে মানগুলি পান তবে এটি আরও সহজ, যেহেতু আপনি সরাসরি এসকিউএল এ এটি করতে পারেন:

পোস্টগ্রিজ এসকিউএল এবং মাইএসকিউএল:

SELECT 
    concat_ws(' / '
        , NULLIF(searchTerm1, '')
        , NULLIF(searchTerm2, '')
        , NULLIF(searchTerm3, '')
        , NULLIF(searchTerm4, '')
    ) AS RPT_SearchTerms; 

এমনকি গৌরবময় এমএস-এসকিউএল-সার্ভারের মাধ্যমে এটিও সম্ভব (পিএস: এটি ব্যঙ্গাত্মক):

DECLARE @in_SearchTerm1 nvarchar(100) 
DECLARE @in_SearchTerm2 nvarchar(100) 
DECLARE @in_SearchTerm3 nvarchar(100) 
DECLARE @in_SearchTerm4 nvarchar(100) 

SET @in_SearchTerm1 = N'a'
SET @in_SearchTerm2 = N''
SET @in_SearchTerm3 = N'c'
SET @in_SearchTerm4 = N''

SELECT 
    COALESCE
    (
        STUFF
        (
            (
                SELECT ' / ' + RPT_SearchTerm AS [text()]
                FROM 
                (
                                  SELECT NULLIF(@in_SearchTerm1, N'') AS RPT_SearchTerm, 1 AS RPT_Sort 
                        UNION ALL SELECT NULLIF(@in_SearchTerm2, N'') AS RPT_SearchTerm, 2 AS RPT_Sort  
                        UNION ALL SELECT NULLIF(@in_SearchTerm3, N'') AS RPT_SearchTerm, 3 AS RPT_Sort 
                        UNION ALL SELECT NULLIF(@in_SearchTerm4, N'') AS RPT_SearchTerm, 4 AS RPT_Sort 
                ) AS tempT 
                WHERE RPT_SearchTerm IS NOT NULL 
                ORDER BY RPT_Sort 
                FOR XML PATH(N''), TYPE 
            ).value('.', 'nvarchar(MAX)') 
            ,1
            ,3
            ,N''
        )
        ,N''
    ) AS RPT_SearchTerms 

0

নিম্নলিখিত চেষ্টা করুন:

var finalString = String.Join(",", ExampleArrayOfObjects.Where(x => !String.IsNullOrEmpty(x.TestParameter)).Select(x => x.TestParameter));

আপনার উত্তরে দয়া করে আরও তথ্য যুক্ত করার বিষয়ে বিবেচনা করুন
ইন্ডার

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