String.Join विधि जो खाली तारों की उपेक्षा करती है?


96

VB.NET विधि String.Join(separator, stringArray)PHP के निहित के समान है, लेकिन सरणी में किसी भी अशक्त तत्वों को खाली स्ट्रिंग के साथ बदल दिया जाता है, इसलिए:

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 ()
जेम्स वेस्टगेट

जवाबों:


170

VB.NET

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

सी#

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


मुझे एक त्रुटि मिल रही है: "'जहाँ' 'System.Array' का सदस्य नहीं है"। : और मैं के बारे में 'जहां' MSDN पर कुछ भी नहीं दिख रहा है msdn.microsoft.com/en-us/library/system.array.aspx
डौग

1
मुझे इसके बजाय कुछ किस्मत मिली: Array.FindAll(myArray, Function(s) Not String.IsNullOrEmpty(s)) क्या आप अपना जवाब बदल सकते हैं या Whereबयान को समझा सकते हैं ?
डग

7
Whereविधि से System.Linq, msdn.microsoft.com/en-us/library/bb534803.aspx
Damith

50

C # ==> के लिए String.Join(",", arr.Where(s => !String.IsNullOrEmpty(s)));


1
दो साल बाद स्वीकार किए गए उत्तर stackoverflow.com/a/16326071/461444 के बिल्कुल समान पोस्ट करने का उद्देश्य क्या है ?
AFract

10
@AFract: इस stackoverflow.com/posts/16326071/revisions की जाँच करें जिस पद का आपने उल्लेख किया है वह इस वर्ष के प्रारंभ में संपादित किया गया था और उस समय उन्होंने C # के लिए मूल उत्तर जोड़ा नमूना अद्यतन किया था
SharpCoder

3

.NET 2.0 (कोई LINQ) में ऐसा करने के लिए, जैसे SQL-Server ReportingServices के लिए इसके लिए एक फ़ंक्शन लिखने के बिना:

VB.NET

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)

C # (Google से लैंडिंग करने वाले और VB.NET की खोज न करने के लिए)

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);

यह मानता है कि चरित्र स्ट्रिंग आपके स्ट्रिंग्स में नहीं होती है (आमतौर पर यह सच होना चाहिए, क्योंकि आप बस कीबोर्ड द्वारा इस चरित्र में प्रवेश नहीं कर सकते हैं)।

इसके अलावा, यदि आपको डेटाबेस से मान मिलते हैं, तो यह और भी सरल है, क्योंकि आप इसे सीधे SQL में कर सकते हैं:

PostgreSQL और MySQL:

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));

कृपया अपने उत्तर में अधिक जानकारी जोड़ने पर विचार करें
Inder

0

यह VB.NET के लिए ठीक काम करता है

Join(*yourArray*.Where(Function(s) Not String.IsNullOrEmpty(s)).ToArray(), *yourDelimiter*)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.