2013-05-01 3 views
66

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

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" 

उत्तर

91

VB.NET

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

सी #

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

+0

मुझे एक त्रुटि मिल रही है: "कहां 'सिस्टम' एर्रे 'का सदस्य नहीं है। और मुझे एमएसडीएन पर 'कहां' के बारे में कुछ नहीं दिख रहा है: http://msdn.microsoft.com/en-us/library/system.array.aspx – Doug

+0

इसके बजाय मुझे इसके साथ कुछ भाग्य था: 'Array.FindAll (myArray , फ़ंक्शन (ओं) नहीं स्ट्रिंग। INNullOrEmpty (ओं)) 'क्या आप या तो अपना उत्तर बदल सकते हैं या' कहां 'कथन की व्याख्या कर सकते हैं? – Doug

+2

'सिस्टम 'लिंक्क' से कहां है, http://msdn.microsoft.com/en-us/library/bb534803.aspx – Damith

42

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

+1

स्वीकार्य उत्तर के रूप में बिल्कुल वही चीज़ पोस्ट करने का उद्देश्य क्या है https: // दो साल बाद stackoverflow.com/a/16326071/461444? – AFract

+3

@AFract: इस https://stackoverflow.com/posts/16326071/revisions को जांचें, जिस पोस्ट का आपने उल्लेख किया था, इस साल की शुरुआत में संपादित किया गया था और उस समय उन्होंने सी # के लिए मूल उत्तर जोड़ा नमूना अपडेट किया था। – SharpCoder

1

इसे .NET 2.0 (कोई LINQ) में करने के लिए, उदा। एसक्यूएल सर्वर-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) 

सी # (गूगल से उतरने के उन लोगों के लिए और 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); 

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

इसके अलावा, अगर आप एक डेटाबेस से मूल्यों को प्राप्त है, तो यह और भी आसान है, जब से तुम सीधे एसक्यूएल में कर सकते हैं:

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 
संबंधित मुद्दे