यह जांचना कि क्या एक स्ट्रिंग सरणी में एक मान है, और यदि हां, तो इसकी स्थिति प्राप्त करना


163

मेरे पास यह स्ट्रिंग सरणी है:

string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";

अगर stringArrayइसमें शामिल हो तो मैं यह निर्धारित करना चाहूंगा value। यदि हां, तो मैं सरणी में इसकी स्थिति का पता लगाना चाहता हूं।

मैं छोरों का उपयोग नहीं करना चाहता। क्या कोई सुझाव दे सकता है कि मैं यह कैसे कर सकता हूं?

जवाबों:


317

आप Array.IndexOf विधि का उपयोग कर सकते हैं :

string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
int pos = Array.IndexOf(stringArray, value);
if (pos > -1)
{
    // the array contains the string and the pos variable
    // will have its position in the array
}

1
... और मैं महीनों से फोरच का उपयोग कर रहा हूं। BTW क्या यह कम्प्यूटेशनल BLUEPIXY के उत्तर से अधिक तेज़ है? या धीमा?
मैक्स वॉन हिप्पेल

2
क्या Array.IndexOfपूंजीकरण के बारे में परवाह है? करता है "text1" == "TEXT1"?
EVIL

Array.IndexOf−1इंडेक्स 0 बाउंड होने पर ही वापस आता है। यह मामला टूट जाएगा, इसलिए जागरूक रहें! var a = Array.CreateInstance(typeof(int),new int[] { 2 }, new int[] { 1 }); a.SetValue(1, 1); Console.WriteLine(Array.IndexOf(a, 26)); // 0
बेंसकैबिया

यदि आप एक सटीक मिलान की तलाश में हैं तो यह उपयोगी है। हालाँकि, यह उपयोगी हो सकता है यदि आप मामले की परवाह नहीं करते हैं: Array.IndexOf में केस-असंवेदनशील विकल्प कैसे जोड़ें
काइल चैंपियन

72
var index = Array.FindIndex(stringArray, x => x == value)

7
यह स्वीकृत उत्तर होना चाहिए क्योंकि यह एक लंबोदर में से गुजरने की अनुमति देता है जैसे कि Array.FindIndex (सरणी, x => x.StartsWith ("यहां स्ट्रिंग डालें") जैसे अधिक जटिल चीजें करने के लिए
reggaeguitar

1
लेकिन यह वह नहीं है जो सवाल पूछ रहा है। सवाल पूछता है कि आपको किसी सरणी से ज्ञात मूल्य कैसे मिलता है।
कार्ल गजर्टसेन

2
@ कर्लजर्त्सेन मैं सरणी में अपनी स्थिति का पता लगाना चाहता हूं
BLUEPIXY

यह बहुत उपयोगी है, हालांकि, x.ToUpper () की तरह कुछ करने में सक्षम होना मेरे लिए बहुत फायदेमंद था।
mrshickadance

31

हम भी उपयोग कर सकते हैं Exists:

string[] array = { "cat", "dog", "perl" };

// Use Array.Exists in different ways.
bool a = Array.Exists(array, element => element == "perl");
bool c = Array.Exists(array, element => element.StartsWith("d"));
bool d = Array.Exists(array, element => element.StartsWith("x"));

1
स्वच्छ और सरल उत्तर
आर्यन फिरोजियन

मैं व्यक्तिगत मूल्यों की जांच कैसे करूं? जब मैंने एक चार के लिए एक चार सरणी की जाँच करने की कोशिश की, तो मुझे एक संदेश मिला charजिसे परिवर्तित नहीं किया जा सकता हैSystem.Predicate<char>
हारून फ्रेंक

13

संपादित करें: मैंने देखा था कि आपको स्थिति की आवश्यकता नहीं थी। आप IndexOfकिसी सरणी प्रकार के मान पर सीधे उपयोग नहीं कर सकते , क्योंकि यह स्पष्ट रूप से लागू किया गया है। हालाँकि, आप उपयोग कर सकते हैं:

IList<string> arrayAsList = (IList<string>) stringArray;
int index = arrayAsList.IndexOf(value);
if (index != -1)
{
    ...
}

(यह बुला के समान है Array.IndexOfडैरिन के जवाब के अनुसार -। सिर्फ एक वैकल्पिक दृष्टिकोण यह मेरे लिए स्पष्ट नहीं है क्यों है सरणियों में स्पष्ट रूप से लागू किया, लेकिन कभी कोई आपत्ति ...)IList<T>.IndexOf


मुझे समकालीनता का उपयोग करके सरणी में दुनिया का आधिपत्य कैसे मिलेगा?
मोशे

क्या स्ट्रिंग सरणी में एक स्ट्रिंग आइटम की जांच करने के लिए कोई अन्य वस्तु है?
मुरली मुरुगेसन

@ मुरलीमुरुगेसन: यह स्पष्ट नहीं है कि आप क्या पूछ रहे हैं - क्या दो सरणियों में कोई सामान है? एक विशिष्ट वस्तु? (बाद के मामले में, तथ्य यह है कि यह एक सरणी में भी अप्रासंगिक है।)
जॉन स्कीट

मैं यहां stackoverflow.com/a/22812525/1559213 का जवाब देने की कोशिश कर रहा था । मैं Html.CheckBox लाइन के लिए सही / गलत लौटने के लिए मारा। वास्तव में एक महीने की सरणी है और वह मॉडल भी है जिसमें कुछ महीने हैं। यदि मॉडल महीना महीनों की सरणी में मौजूद है, तो हमें सही वापसी करने की आवश्यकता है। रॉकेट प्रतिक्रिया के लिए धन्यवाद :)
मुरली मुरुगेसन

@ मुरलीमुरुगेसन: अच्छी तरह से लगता है किif (months.Contains(model.Month))
जॉन स्कीट

5

आप उपयोग कर सकते हैं Array.IndexOf()- ध्यान दें कि यह -1 वापस आ जाएगा यदि तत्व नहीं मिला है और आपको इस मामले को संभालना है।

int index = Array.IndexOf(stringArray, value);

4

आप इस तरह की कोशिश कर सकते हैं ... आप Array.IndexOf () का उपयोग कर सकते हैं, यदि आप स्थिति भी जानना चाहते हैं

       string [] arr = {"One","Two","Three"};
       var target = "One";
       var results = Array.FindAll(arr, s => s.Equals(target));

3

IMO यह जांचने का सबसे अच्छा तरीका है कि किसी सरणी में दिए गए मान में System.Collections.Generic.IList<T>.Contains(T item)विधि का उपयोग करना है या नहीं:

((IList<string>)stringArray).Contains(value)

पूरा कोड नमूना:

string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
if (((IList<string>)stringArray).Contains(value)) Console.WriteLine("The array contains "+value);
else Console.WriteLine("The given string was not found in array.");

T[]निजी तौर पर List<T>काउंट और कॉन्टेस्ट जैसे कुछ तरीकों को लागू करता है । क्योंकि यह एक स्पष्ट (निजी) क्रियान्वयन है, आप पहले सरणी डाले बिना इन विधियों का उपयोग नहीं कर पाएंगे। यह केवल स्ट्रिंग्स के लिए काम नहीं करता है - आप इस ट्रिक का उपयोग यह जांचने के लिए कर सकते हैं कि किसी प्रकार के किसी सरणी में कोई तत्व है या नहीं, जब तक कि तत्व का वर्ग IComparable लागू नहीं करता है।

ध्यान रखें कि सभी IList<T>तरीके इस तरह से काम नहीं करते हैं। उपयोग करने की कोशिश कर रहा हैIList<T>किसी सरणी पर विधि जोड़ें विधि विफल रहेगा।


2
तुम्हारा मूल रूप से प्रियांक के रूप में एक ही जवाब है। यह उस तत्व का सूचकांक नहीं देता है जो ओपी के लिए पूछ रहा था।
रेगेगिटेरिटी

@reggaeguitar वहाँ तुम्हारे साथ सहमत हूँ!
19

यह वह समाधान है जिसकी मैं तलाश कर रहा था, हालांकि यह पूरी तरह से सवाल का जवाब नहीं देता है।
शुभ अंक

1

आप यह कोशिश कर सकते हैं, यह इस तत्व वाले सूचकांक के लिए लग रहा है, और यह सूचकांक संख्या को इंट के रूप में सेट करता है, फिर यह जांचता है कि अगर इंट अधिक है तो -1, इसलिए यदि यह 0 या अधिक है, तो इसका मतलब है कि यह ऐसा पाया गया है एक सूचकांक - जैसा कि सरणियाँ 0 आधारित हैं।

string[] Selection = {"First", "Second", "Third", "Fourth"};
string Valid = "Third";    // You can change this to a Console.ReadLine() to 
    //use user input 
int temp = Array.IndexOf(Selection, Valid); // it gets the index of 'Valid', 
                // in our case it's "Third"
            if (temp > -1)
                Console.WriteLine("Valid selection");
            }
            else
            {
                Console.WriteLine("Not a valid selection");
            }

0
string x ="Hi ,World";
string y = x;
char[] whitespace = new char[]{ ' ',\t'};          
string[] fooArray = y.Split(whitespace);  // now you have an array of 3 strings
y = String.Join(" ", fooArray);
string[] target = { "Hi", "World", "VW_Slep" };

for (int i = 0; i < target.Length; i++)
{
    string v = target[i];
    string results = Array.Find(fooArray, element => element.StartsWith(v, StringComparison.Ordinal));
    //
    if (results != null)
    { MessageBox.Show(results); }

}

0

मैंने पुन: उपयोग के लिए एक विस्तार विधि बनाई।

   public static bool InArray(this string str, string[] values)
    {
        if (Array.IndexOf(values, str) > -1)
            return true;

        return false;
    }

इसे कैसे कॉल करें:

string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
if(value.InArray(stringArray))
{
  //do something
}

positionवह ओपी कहां से मांग रहा है?
19

-3
string[] strArray = { "text1", "text2", "text3", "text4" };
string value = "text3";

if(Array.contains(strArray , value))
{
    // Do something if the value is available in Array.
}

यह त्रुटि देता है: 'System.Array' में 'समाहित' की परिभाषा नहीं है।
ईपंडित

-4

सबसे सरल और छोटी विधि निम्नलिखित होगी।

string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";

if(stringArray.Contains(value))
{
    // Do something if the value is available in Array.
}

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