2010-10-12 21 views
19

नेट 2स्ट्रिंग सरणी। शामिल है?

string[] myStrings = GetMyStrings();  
string test = "testValue"; 

कैसे इस बात की पुष्टि कर सकते हैं अगर myStringstest शामिल?

+0

vb.net और सी # एक ही भाषा ... –

+0

@Chris थॉम्पसन नहीं हैं: यह eddy556 है .... – serhio

+1

आईक्यू परीक्षण? ~ 4 के लड़के से ऐसा सवाल? (.NET 2.0 का उपयोग करना स्पष्ट नहीं है) – Xaqron

उत्तर

2
bool ContainsString(string[] arr, string testval) 
{ 
    if (arr == null) 
     return false; 
    for (int i = arr.Length-1; i >= 0; i--) 
     if (arr[i] == testval) 
      return true; 
    return false; 
} 

और यह अब तक का सबसे अच्छा प्रदर्शन होगा। :

List<string> myStrings = new List<string>(GetMyStrings()); 
if(myStrings.Contains("testValue")) 
{ 
    // Do Work 
} 
+0

ध्यान से पढ़ें;) – serhio

+0

@ सेरहियो। मैंने किया। तीन बार। आप यह निर्धारित करने के लिए कहते हैं कि स्ट्रिंग सरणी में कोई विशेष स्ट्रिंग निहित है या नहीं। इसे आपको इसी तरह करना होगा। यदि यह आवश्यक नहीं है, तो कृपया अपने प्रश्न को ठीक करें। –

+0

बस सरणी से myStrings में सरणी बदलें और यह उत्तर काम करेगा। यह आपके लिए कैसे काम नहीं करता है? –

9

इसके बजाय एक स्थिर सरणी का उपयोग कर के, आप एक सूची इस्तेमाल कर सकते हैं। यदि ऐसा है तो आप एक साधारण पाश बनाना चाहते हैं। वास्तव में मुझे लगता है कि आपको click here होना चाहिए।

+0

मैं 'स्ट्रिंग [] अक्षरों = "ए, बी, सी, डी" का उपयोग करता हूं। .Split(); '। क्या ऐरे से सूची में रूपांतरणों का उपयोग करने के लिए इस तरह के एक प्राथमिक कार्य के लिए इष्टतम है? – serhio

+5

@ सेरहियो - कोड पहले, यदि आवश्यक हो तो बाद में अनुकूलित करें। जब तक आप इन सूचियों को बड़े पैमाने पर नहीं बना रहे हैं, तब तक वास्तव में कोई समस्या नहीं होनी चाहिए। –

-2

मुझे लगता है आप अगर अपने सरणी में किसी भी तत्व को एक निश्चित मूल्य (परीक्षण) शामिल हैं जाँच करना चाहते हैं: पी

10

यहां एक .NET 2.0 अनुपालन दृष्टिकोण है। यदि मूल्य नहीं मिला है तो Array.Find का उपयोग शून्य से वापस आ जाएगा।

सी # दृष्टिकोण

string[] myStrings = { "A", "B", "testValue" }; 
string test = "testValue"; 
string result = Array.Find(myStrings, delegate(string s) { return s == test; }); 
Console.WriteLine("Result: " + result); 

आप एक केस संवेदी मैच उपयोग s.Equals(test, StringComparison.InvariantCultureIgnoreCase) की जरूरत है।

संपादित करें: वीबी.नेट 2.0 के साथ अधिक प्रयास की आवश्यकता है क्योंकि यह अज्ञात प्रतिनिधियों का समर्थन नहीं करता है। इसके बजाय आपको Function जोड़ने और इसे इंगित करने के लिए AddressOf का उपयोग करना होगा। आपको सदस्य या संपत्ति के रूप में testValue सेट करने की आवश्यकता होगी क्योंकि यह भविष्यवाणी विधि में पारित नहीं किया जाएगा। निम्नलिखित उदाहरण में मैं Array.Exists का उपयोग करता हूं।

VB.NET दृष्टिकोण

' field or property ' 
Dim test As String = "testValue" 

Sub Main 
    Dim myStrings As String() = { "A", "B", "testValue" }  
    Dim result As Boolean = Array.Exists(myStrings, AddressOf ContainsValue) 
    Console.WriteLine(result) 
End Sub 

' Predicate method ' 
Private Function ContainsValue(s As String) As Boolean 
    Return s = test 
End Function 
+0

वीबी समाधान के लिए धन्यवाद, भले ही मुझे सी # एक की आवश्यकता हो, शायद वीबी लोगों के लिए उपयोगी हो जाएगा ... – serhio

+0

मुझे 2.0 और वीबी आवश्यकता याद आई। यह निश्चित रूप से काम करेगा, लेकिन Array.IndexOf के लिए एक कॉल आसान हो सकता है। –

+0

@ क्रिस सहमत हुए। यह 'कंटेनर' प्रकार के चेक के करीब है लेकिन 'इंडेक्सऑफ' से अधिक प्रयास की आवश्यकता है। –

18

.NET 2.0 में, आप अगर आप सूचकांक चाहते निम्न कर सकता है:

int index = Array.FindIndex(
    myStrings, 
    delegate(string s) { return s.Equals(test); } 
); 

index हो जाएगा -1 अगर myStringstest शामिल नहीं है ।

आप केवल होने की जाँच करना चाहते हैं:

bool exists = Array.Exists(
    myStrings, 
    delegate(string s) { return s.Equals(test); } 
); 
1

यहाँ MSDN पर लगभग ठीक उसी सवाल है। Find String in String Array के रूप में अन्य लोगों ने कहा क्या तुम सच में दो विकल्प हैं: स्ट्रिंग

0

खोजने के लिए अपने सरणी के माध्यम से 1) आसान 2 की जाँच के लिए एक सूची का उपयोग करें) लूप कैसे इस बारे में:

Sub Main 
    Dim myStrings(4) As String 
    myStrings(0) = "String 1" 
    myStrings(1) = "String 2" 
    myStrings(2) = "testValue" 
    myStrings(3) = "String 3" 
    myStrings(4) = "String 4" 

    Dim test As String = "testValue" 

    Dim isFound As Boolean = Array.IndexOf(myStrings, test) >= 0 

    If isFound Then 
     Console.WriteLine("Found it!") 
    End If 
End Sub 

यह चाहिए .NET 2.0 और VB.Net के लिए काम करें।

+1

ओपी का मुद्दा यह है कि यह लैम्बडास के साथ संगत .NET 2.0 नहीं है। –

+0

यदि ओपी वीएस -2008 का उपयोग कर रहा है तो वे .NET 2.0 को लक्षित करते समय लैम्बडा का उपयोग कर सकते हैं। – onedaywhen

1

आप नीचे वर्णित अनुसार Array.BinarySearch का उपयोग कर सकते हैं।

string[] strArray = GetStringArray(); 
     string strToSearch ="test"; 
     Array.BinarySearch(strArray, strToSearch); 
+0

+1। जेनेरिक संस्करण भी बेहतर हो सकता है। – serhio

+1

यह केवल तभी काम करेगा जब सरणी को – Jan

7

सोचा मैं पहले उपलब्ध .NET 3.5 में मिश्रण करने के लिए एक और जोड़ना होगा, मेरा मानना ​​है कि:

Enumerable.Contains(myStrings.ToArray(), test) 
+1

सॉर्ट किया गया है इसका अर्थ यह है कि 'System.Linq' का उपयोग करके, आप' myStrings.Contains (test) 'लिख सकते हैं, क्योंकि' एन्यूमेरेबल। कॉन्टेन्स 'एक एक्सटेंशन विधि है। (बीटीडब्ल्यू, .NET संस्करण 3.5 समान सीएलआर का उपयोग .NET संस्करण 2.0 के रूप में करता है, इसलिए यह आमतौर पर ".NET 2.0" में काम करता है।) –

संबंधित मुद्दे