روش اول جستجو یک متن در یک آرایه
می خواهیم با استفاده از یک نمونه قطعه کد زیر یک رشته string را در یک آرایه جستجو کنیم که آیا شامل کلمه مدنظر ما می شود یا خیر :
فرض کنید چنین چیزی مد نظر ما باشد :
string stringToCheck = "text1text2text3"; string[] stringArray = { "text1", "someothertext", etc... }; if(stringToCheck.contains stringArray) //one of the items? { }
حال می توانید از قطعه کد زیر استفاده کنید . لازم به ذکر است که قطعه کد زیر با استفاده از روش کتابخانه LINQ نوشته شده که بسیار کارآمدتر و بهینه شده می باشد .
قطعه کدی که در زیر مشاهده می کنید توسط برنامه کامپایلر به جهت تست آزمایش شده و خروجی صحیح مدنظر را بدست آورد.
string stringToCheck = "text1"; string[] stringArray = { "text1", "testtest", "test1test2", "test2text1" }; foreach (string x in stringArray) { if (stringToCheck.Contains(x)) { // Process... } }
روش دوم جستجو یک متن در یک آرایه
همچنین راه حل بهتری نیز مانند قطعه کد زیر موجود است .
string[] nonSupportedExt = { ".3gp", ".avi", ".opus", ".wma", ".wav", ".m4a", ".ac3", ".aac", ".aiff" }; bool valid = Array.Exists(nonSupportedExt,E => E == ".Aac".ToLower());
روش سوم جستجو یک متن در یک آرایه
قطعه کدهای بالا را بررسی کنید اما اگر حساسیت حروف بزرگ و کوچک هم برای شما اهمیت داشته باشد می توانید از قطعه کد زیر استفاده کنید :
در این قطعه کد از کتابخانه LINQ استفاده شده است .
using System.Linq; string stringToCheck = "text1text2text3"; string[] stringArray = { "text1", "someothertext"}; if(stringArray.Any(a=> String.Equals(a, stringToCheck, StringComparison.InvariantCultureIgnoreCase)) ) { //contains } if (stringArray.Any(w=> w.IndexOf(stringToCheck, StringComparison.InvariantCultureIgnoreCase)>=0)) { //contains }
روش چهارم جستجو یک متن در یک آرایه
شما می توانید متدهای string.ContainsAny () و string.ContainsAll () خود را تعریف کنید. به عنوان مثال قطعه کد زیر که امکان مقایسه بدون حساسیت به کوچک و غیره را هم فراهم می کند.
public static class Extensions { public static bool Contains(this string source, string value, StringComparison comp) { return source.IndexOf(value, comp) > -1; } public static bool ContainsAny(this string source, IEnumerable<string> values, StringComparison comp = StringComparison.CurrentCulture) { return values.Any(value => source.Contains(value, comp)); } public static bool ContainsAll(this string source, IEnumerable<string> values, StringComparison comp = StringComparison.CurrentCulture) { return values.All(value => source.Contains(value, comp)); } }
برای تست آن از موارد زیر استفاده کنید :
public static void TestExtensions() { string[] searchTerms = { "FOO", "BAR" }; string[] documents = { "Hello foo bar", "Hello foo", "Hello" }; foreach (var document in documents) { Console.WriteLine("Testing: {0}", document); Console.WriteLine("ContainsAny: {0}", document.ContainsAny(searchTerms, StringComparison.OrdinalIgnoreCase)); Console.WriteLine("ContainsAll: {0}", document.ContainsAll(searchTerms, StringComparison.OrdinalIgnoreCase)); Console.WriteLine(); } }
استفاده از روش بدون حلقه جهت جستجو در آرایه
قطعه کد زیر نیاز به تکمیل شدن دارد !
string stringToCheck = "text1"; List<string> stringList = new List<string>() { "text1", "someothertext", "etc.." }; if (stringList.Exists(o => stringToCheck.Contains(o))) { /// }
استفاده از روش های تک خطی ( تست کنید )
int result = Array.BinarySearch(list.ToArray(), typedString, StringComparer.OrdinalIgnoreCase);
string strName = "vernie"; string[] strNamesArray = { "roger", "vernie", "joel" }; if (strNamesArray.Any(x => x == strName)) { // do some action here if true... }
stringArray.Any(s => stringToCheck.IndexOf(s, StringComparison.CurrentCultureIgnoreCase) > -1)
if(stringArray1.Any(stringArray2.Contains))
if(stringArray1.All(stringArray2.Contains))
قطعه کد اجرایی بدون نیاز به استفاده از کتابخانه LINQ
if (Array.IndexOf(array, Value) >= 0) { //Your stuff goes here }
لازم است بدانید برای کار با Text همیشه استفاده از کتابخانه Linq سریعترین و جمع و جورترین روش برای انجام این کار است. ما پیشنهاد می کنیم برای دریافت اطلاعات بیشتر این کتابخانه از این لینک استفاده کنید .
var arrayA = new[] {"element1", "element2"}; var arrayB = new[] {"element2", "element3"}; if (arrayB.Any(arrayA.Contains)) return true;
سلام
یک سوال برنامه نویسی داشتم