স্ট্রিংয়ের স্ট্রিং অ্যারেটিতে একটি স্ট্রিং রয়েছে কিনা তা পরীক্ষা করতে সি # ব্যবহার করে


290

আমি স্ট্রিংয়ের মানটিতে একটি স্ট্রিং অ্যারেতে একটি শব্দ রয়েছে কিনা তা পরীক্ষা করতে আমি সি # ব্যবহার করতে চাই। উদাহরণ স্বরূপ,

string stringToCheck = "text1text2text3";

string[] stringArray = { "text1", "someothertext", etc... };

if(stringToCheck.contains stringArray) //one of the items?
{

}

'স্ট্রিংটোকেকের' স্ট্রিংয়ের মানটিতে অ্যারেতে একটি শব্দ রয়েছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?


1
এই স্ট্রিংটিতে স্ট্রিংয়ের একটি স্ট্রিং রয়েছে কিনা তা পরীক্ষার জন্য অনেকগুলি কৌশল বেঞ্চমার্ক করে: ব্লগস.ডাভলোজিনস্কি
রবার্ট হার্ভে

উত্তর:


145

আপনি এখানে এটি করতে পারেন:

string stringToCheck = "text1";
string[] stringArray = { "text1", "testtest", "test1test2", "test2text1" };
foreach (string x in stringArray)
{
    if (stringToCheck.Contains(x))
    {
        // Process...
    }
}

আপডেট: হতে পারে আপনি আরও ভাল সমাধানের সন্ধান করছেন .. নীচে @ অ্যান্টন গোগোলেভের উত্তরটি দেখুন যা লিনকিউ ব্যবহার করে Q


3
ধন্যবাদ, আমি আপনার কোডটি এতে পরিবর্তন করেছি: যদি (স্ট্রিংটোচেক.কন্টেনস) গুলি কাজ করে।
থিওম্যাক্স

5
আমি যদি (স্ট্রিংআরে। কনটেনস (স্ট্রিংটোকেক)) করেছিলাম এবং ধন্যবাদ এটি ধন্যবাদ।
তামারা জিকিউ

68
পরিবর্তে এই উত্তরটি
লিনকিউ

11
যারা দেখতে না করার লিটল নোট রয়েছে আপনি একটি আছে চেক "System.Linq ব্যবহার করা;": স্ট্রিং শৃঙ্খলার পদ্ধতি আপনার কোডফাইলে নামস্থান :)
সুধাংশু মিশ্র

5
লিঙ্ক সবসময় লিগ্যাসি সফ্টওয়্যারটিতে পাওয়া যায় না।
উইলিয়াম মরিসন

842

এখানে কীভাবে:

if(stringArray.Any(stringToCheck.Contains))
/* or a bit longer: (stringArray.Any(s => stringToCheck.Contains(s))) */

সাবস্ক্রিংগুলির stringToCheckমধ্যে যে কোনও একটি রয়েছে কিনা তা এটি পরীক্ষা করে stringArray। আপনি যদি নিশ্চিত করতে চান যে এতে সমস্ত সাবস্ট্রিং রয়েছে, তবে এতে পরিবর্তন Anyকরুন All:

if(stringArray.All(stringToCheck.Contains))

115
স্বরে নোট করুন: লিনাক আশ্চর্যজনক, লিনাক আশ্চর্যজনক, লিনাক আশ্চর্যজনক! লিনক ব্যবহার শুরু করুন।
ফ্রেডরিক জোহানসন

2
@Spooks Linq অবজেক্টস (যা উত্তর এর স্ট্রিং-যাচাই ব্যবহার করা হয়) LinqBridge মাধ্যমে ব্যবহার করা যেতে পারে .NET 2.0 উপর albahari.com/nutshell/linqbridge.aspx
ডেভিড Rettenbacher

1
কেস ইনভেরিয়েন্স দিয়ে আপনি এটি কীভাবে করবেন?
অফার

14
@ অফলার এটি হবেstringArray.Any(s => s.IndexOf(stringToCheck, StringComparison.CurrentCultureIgnoreCase) > -1)
অ্যান্টন গোগোলেভ

2
অ্যারে কোন আইটেম মেলে কিভাবে?
আইবুবি

44

এটা চেষ্টা কর:

লিনকিউ ব্যবহার করার দরকার নেই

if (Array.IndexOf(array, Value) >= 0)
{
    //Your stuff goes here
}

নিস! আর লিনকের আরে.আইডেক্সফের উপর কী কী সুবিধা থাকতে পারে ??
Heckflosse_230

21
এটি প্রশ্নটি মোটেও সমাধান করে না। ইনডেক্সঅফ আপনাকে জানায় যে কোনও অ্যারেটিতে একটি স্ট্রিংয়ের জন্য হুবহু মিল রয়েছে, মূল প্রশ্নটি যদি স্ট্রিংয়ের একটি অ্যারের থাকে তবে লিনক সহজেই পরিচালনা করে।
নেটমেজ

আমি জানি এই মন্তব্যটি দেরিতে হয়েছে, তবে যারা জানেন না কেবল তাদের কাছে একটি স্ট্রিং হ'ল অক্ষরের একটি অ্যারে তাই স্ট্রিংয়ের ধরণগুলিতে একটি সূচক পদ্ধতি থাকে ... সুতরাং @ নেটমেজ এটি একটি সম্ভাব্য সমাধান solution
ব্ল্যাকি ওল্ফ

3
@ ব্ল্যাকি ওল্ফ, আপনি প্রশ্নটি পড়েছেন? অ্যারে.আইডেক্সঅফ আপনাকে বলবে যে কোনও অ্যারেতে একটি মান রয়েছে কিনা, ওপি জানতে চেয়েছিল যে কোনও মানটিতে একটি অ্যারের কোনও সদস্য রয়েছে কিনা, ঠিক এই বিপরীতে বিপরীত। আপনি লিংকের সাথে স্ট্রিং.ইনডেক্সঅফ ব্যবহার করতে পারেন: stringArray.Any(w => stringToCheck.IndexOf(w) >= 0)তবে স্ট্রিং ব্যবহার করে লিনকের উত্তরটি দেওয়া হয়েছে ain
নেটমেজ

40

শুধু লিনাক পদ্ধতি ব্যবহার করুন:

stringArray.Contains(stringToCheck)

4
দ্রষ্টব্য, এটি using System.Linq;
ধারণটি

11
এই উত্তরটি প্রশ্ন থেকে পিছনের দিকে।
নেটমেজ

2
এই উত্তরটি এতবার কীভাবে উপসৃত হয়েছে? প্রশ্ন জিজ্ঞাসার 5 বছর পরে এবং সমাধানটি মূলত প্রশ্নটি যা জিজ্ঞাসা করছে তার বিপরীতে।
ফুস রো দাহ

1
সম্ভবত কেবল পরিবর্তনশীল নামগুলি ঠিক করা ঠিক হবে?
জাঁ ফ্রাসোয়া Fabre

8

সবচেয়ে সহজ এবং নমুনা উপায়।

  bool bol=Array.Exists(stringarray,E => E == stringtocheck);

ভাল stringarray.Exists আছে (সত্তা => সত্তা == stringtocheck)
মার্সেল Grüger

আমার মনে হয় আপনি নাকিসুরে কথা কল স্ট্রিং array.Exists থেকে সরাসরি পদ্ধতি বিদ্যমান পদ্ধতি তালিকার জন্য সরাসরি ব্যবহার করতে পারেন <টি> .So array.exist <টি> স্ট্রিং এর জন্য এখানে => array.check স্ট্যাটিক পদ্ধতি ব্যবহার করা উচিত msdn.microsoft.com/en- ইউএস / গ্রন্থাগার / yw84x8be (v = বনাম 1110)।
এসপিএক্স

6
string strName = "vernie";
string[] strNamesArray = { "roger", "vernie", "joel" };

if (strNamesArray.Any(x => x == strName))
{
   // do some action here if true...
}

2
আমি মনে করি না এটিই প্রশ্নটি জিজ্ঞাসা করছে।
পং

5

এরকম কিছু সম্ভবত:

string stringToCheck = "text1text2text3";
string[] stringArray = new string[] { "text1" };
if (Array.Exists<string>(stringArray, (Predicate<string>)delegate(string s) { 
    return stringToCheck.IndexOf(s, StringComparison.OrdinalIgnoreCase) > -1; })) {
    Console.WriteLine("Found!");
}

এটি আরও ভাল সমাধান, যেহেতু এটি কোনও তালিকার সঠিক মিলের পরীক্ষার পরিবর্তে তালিকার শব্দের বিরুদ্ধে একটি স্ট্রিং চেক।
রায় বি

উত্তম উত্তর, তবে বাহ যে লিনাক ছাড়াই আধুনিক সি # এর সাথে তুলনা করা খুব কঠিন; এছাড়াও, আপনি কেসটি উপেক্ষা করতে না চাইলে String.Containsতার চেয়ে ভাল হতে পারে String.IndexOf, যেহেতু মাইক্রোসফ্ট String.Containsআপনার নিজের লেখার জন্য দুটি যুক্তি ভুলে গেছে । বিবেচনা করুন:Array.Exists(stringArray, s => stringToCheck.IndexOf(s, StringComparison.OrdinalIgnoreCase) > -1)
নেটমেজ

3

লিনক এবং পদ্ধতি গ্রুপ ব্যবহার করা এটির কাজ করার দ্রুত এবং আরও কমপ্যাক্ট উপায়।

var arrayA = new[] {"element1", "element2"};
var arrayB = new[] {"element2", "element3"};
if (arrayB.Any(arrayA.Contains)) return true;

3

আপনি নিজের string.ContainsAny()এবং string.ContainsAll()পদ্ধতিগুলি নির্ধারণ করতে পারেন । বোনাস হিসাবে, আমি এমনকি এমন একটি string.Contains()পদ্ধতি ফেলেছি যা কেস-সংবেদনশীল তুলনা ইত্যাদির জন্য অনুমতি দেয় etc.

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

2

আর্গুমেন্টগুলি পরীক্ষা করতে আমি কনসোল অ্যাপ্লিকেশনটিতে নিম্নলিখিতটি ব্যবহার করি

var sendmail = args.Any( o => o.ToLower() == "/sendmail=true");

2

আমি লিনক ব্যবহার করব তবে এটি এখনও সম্পন্ন করা যেতে পারে:

new[] {"text1", "text2", "etc"}.Contains(ItemToFind);

1

চেষ্টা করুন:

String[] val = { "helloword1", "orange", "grape", "pear" };
String sep = "";
string stringToCheck = "word1";

bool match = String.Join(sep,val).Contains(stringToCheck);
bool anothermatch = val.Any(s => s.Contains(stringToCheck));

1

আন্তন Gogolev যদি চেক করতে প্রস্তাব দেওয়া যেমন এছাড়াও আপনি একই জিনিস করতে পারেন কোন আইটেম মধ্যে stringArray1মিলে যায় কোন আইটেম মধ্যে stringArray2:

if(stringArray1.Any(stringArray2.Contains))

আর একইভাবে সব আইটেম stringArray1 মধ্যে মেলে সব আইটেম stringArray2 মধ্যে:

if(stringArray1.All(stringArray2.Contains))


0

এটি চেষ্টা করে দেখুন, উদাহরণটি এখানে: ক্ষেত্রটিতে অ্যারেতে কোনও শব্দ রয়েছে কিনা তা পরীক্ষা করতে। ক্ষেত্রটি (সামারফিল্ড) অ্যারেতে কোনও শব্দ রয়েছে কিনা তা পরীক্ষা করতে।

String[] val = { "helloword1", "orange", "grape", "pear" };   

Expression<Func<Item, bool>> someFieldFilter = i => true;

someFieldFilter = i => val.Any(s => i.someField.Contains(s));

0
public bool ContainAnyOf(string word, string[] array) 
    {
        for (int i = 0; i < array.Length; i++)
        {
            if (word.Contains(array[i]))
            {
                return true;
            }
        }
        return false;
    }

0

আমি এটি তৈরির জন্য মাইট্রেয় 4৮৪ দ্বারা সূচকের সাথে অনুরূপ পদ্ধতি এবং থিওম্যাক্সের ফোরচ লুপ ব্যবহার করেছি। (দ্রষ্টব্য: প্রথম 3 "স্ট্রিং" লাইনগুলি আপনি কীভাবে অ্যারে তৈরি করতে এবং এটি সঠিক বিন্যাসে পেতে পারেন তার একটি উদাহরণ মাত্র)।

আপনি যদি 2 টি অ্যারের তুলনা করতে চান তবে সেগুলি আধা-কোলন সীমান্তে বিভক্ত হবে, তবে শেষের মানটি এর পরে থাকবে না। আপনি যদি অ্যারের স্ট্রিং ফর্মটিতে অর্ধ-কোলন যুক্ত করেন (যেমন a; b; c হয়ে যায়; b; c;), তবে আপনি "x" ব্যবহার করে মেলাতে পারবেন; এটি কোন অবস্থানেই নেই:

bool found = false;
string someString = "a-b-c";
string[] arrString = someString.Split('-');
string myStringArray = arrString.ToString() + ";";

foreach (string s in otherArray)
{
    if (myStringArray.IndexOf(s + ";") != -1) {
       found = true;
       break;
    }
}

if (found == true) { 
    // ....
}

0
string [] lines = {"text1", "text2", "etc"};

bool bFound = lines.Any(x => x == "Your string to be searched");

বিফাউন্ডটি সত্য সেট করে যদি অনুসন্ধানের স্ট্রিং অ্যারের 'লাইনের' কোনও উপাদানের সাথে মিলে যায়।


0

এটা চেষ্টা কর

string stringToCheck = "text1text2text3";
string[] stringArray = new string[] { "text1" };

var t = lines.ToList().Find(c => c.Contains(stringToCheck));

এটি আপনি যে পাঠ্যের সন্ধান করছেন তার প্রথম ঘটনার সাথে লাইনটি ফিরিয়ে দেবে।


0

যদি stringArrayপ্রচুর পরিমাণে বিচিত্র দৈর্ঘ্যের স্ট্রিং থাকে তবে স্ট্রিং অ্যারে সঞ্চয় করতে এবং অনুসন্ধান করতে ট্রাই ব্যবহারের বিষয়টি বিবেচনা করুন ।

public static class Extensions
{
    public static bool ContainsAny(this string stringToCheck, IEnumerable<string> stringArray)
    {
        Trie trie = new Trie(stringArray);
        for (int i = 0; i < stringToCheck.Length; ++i)
        {
            if (trie.MatchesPrefix(stringToCheck.Substring(i)))
            {
                return true;
            }
        }

        return false;
    }
}

এখানে Trieক্লাসের বাস্তবায়ন রয়েছে

public class Trie
{
    public Trie(IEnumerable<string> words)
    {
        Root = new Node { Letter = '\0' };
        foreach (string word in words)
        {
            this.Insert(word);
        }
    }

    public bool MatchesPrefix(string sentence)
    {
        if (sentence == null)
        {
            return false;
        }

        Node current = Root;
        foreach (char letter in sentence)
        {
            if (current.Links.ContainsKey(letter))
            {
                current = current.Links[letter];
                if (current.IsWord)
                {
                    return true;
                }
            }
            else
            {
                return false;
            }
        }

        return false;
    }

    private void Insert(string word)
    {
        if (word == null)
        {
            throw new ArgumentNullException();
        }

        Node current = Root;
        foreach (char letter in word)
        {
            if (current.Links.ContainsKey(letter))
            {
                current = current.Links[letter];
            }
            else
            {
                Node newNode = new Node { Letter = letter };
                current.Links.Add(letter, newNode);
                current = newNode;
            }
        }

        current.IsWord = true;
    }

    private class Node
    {
        public char Letter;
        public SortedList<char, Node> Links = new SortedList<char, Node>();
        public bool IsWord;
    }

    private Node Root;
}

যদি সমস্ত স্ট্রিংয়ের stringArrayদৈর্ঘ্য একই থাকে তবে আপনি কেবল একটি এর HashSetপরিবর্তে কেবলমাত্র ব্যবহার করা ভালTrie

public static bool ContainsAny(this string stringToCheck, IEnumerable<string> stringArray)
{
    int stringLength = stringArray.First().Length;
    HashSet<string> stringSet = new HashSet<string>(stringArray);
    for (int i = 0; i < stringToCheck.Length - stringLength; ++i)
    {
        if (stringSet.Contains(stringToCheck.Substring(i, stringLength)))
        {
            return true;
        }
    }

    return false;
}

0

সহজ সমাধান, কোনও লিনক প্রয়োজন নেই

স্ট্রিং.জয়াইন (",", অ্যারে)। কনটেন্টস (মান + ",");


2
অ্যারের মানগুলির মধ্যে একটিতে যদি আপনার ডিলিমিটার থাকে?
টাইলার বেনজিং


0

এটি চেষ্টা করে দেখুন, লুপের দরকার নেই ..

string stringToCheck = "text1";
List<string> stringList = new List<string>() { "text1", "someothertext", "etc.." };
if (stringList.Exists(o => stringToCheck.Contains(o)))
{

}

0

উপরের উত্তরগুলি সম্পূর্ণ করতে, IgnoreCase চেক ব্যবহারের জন্য:

stringArray.Any(s => stringToCheck.IndexOf(s, StringComparison.CurrentCultureIgnoreCase) > -1)

এর সাথে ম্যাচের সূচক পাওয়ার কোনও উপায় আছে কি? ধন্যবাদ।
Si8

0

আমার ক্ষেত্রে, উপরের উত্তরগুলি কার্যকর হয়নি। আমি একটি অ্যারেতে একটি স্ট্রিং যাচাই করছিলাম এবং এটি বুলিয়ান মানকে নির্ধারণ করছিলাম। আমি @ অ্যান্টন গোগোলেভের উত্তরটি সংশোধন করে Any()পদ্ধতিটি সরিয়ে দিয়ে পদ্ধতির stringToCheckভিতরে রেখে দিয়েছি Contains()

bool = stringArray.Contains(stringToCheck);


-1

আমি স্ট্রিংটিতে স্ট্রিং অ্যারেতে কোনও আইটেম রয়েছে কিনা তা পরীক্ষা করতে নীচের কোডটি ব্যবহার করেছি:

foreach (string s in stringArray)
{
    if (s != "")
    {
        if (stringToCheck.Contains(s))
        {
            Text = "matched";
        }
    }
}

3
এই সেট Text = "matched"অনেকবার হিসাবে হিসাবে stringToCheckএর সাবস্ট্রিং রয়েছে stringArray। আপনি একটি breakবা returnঅ্যাসাইনমেন্ট পরে লাগাতে চাইতে পারেন ।
ডোর হাই আর্চ

-1

তিনটি বিকল্প প্রদর্শিত। আমি সবচেয়ে সংক্ষিপ্ত হিসাবে তৃতীয় খুঁজে পেতে পছন্দ করি।

class Program {
    static void Main(string[] args) {
    string req = "PUT";
    if ((new string[] {"PUT", "POST"}).Any(s => req.Contains(s))) {
        Console.WriteLine("one.1.A");  // IS TRUE
    }
    req = "XPUT";
    if ((new string[] {"PUT", "POST"}).Any(s => req.Contains(s))) {
        Console.WriteLine("one.1.B"); // IS TRUE
    }
    req = "PUTX";
    if ((new string[] {"PUT", "POST"}).Any(s => req.Contains(s))) {
        Console.WriteLine("one.1.C");  // IS TRUE
    }
    req = "UT";
    if ((new string[] {"PUT", "POST"}).Any(s => req.Contains(s))) {
        Console.WriteLine("one.1.D"); // false
    }
    req = "PU";
    if ((new string[] {"PUT", "POST"}).Any(s => req.Contains(s))) {
        Console.WriteLine("one.1.E"); // false
    }
    req = "POST";
    if ((new string[] {"PUT", "POST"}).Any(s => req.Contains(s))) {
        Console.WriteLine("two.1.A"); // IS TRUE
    }
    req = "ASD";
    if ((new string[] {"PUT", "POST"}).Any(s => req.Contains(s))) {
        Console.WriteLine("three.1.A");  // false
    }


    Console.WriteLine("-----");
    req = "PUT";
    if (Array.IndexOf((new string[] {"PUT", "POST"}), req) >= 0)  {
        Console.WriteLine("one.2.A"); // IS TRUE
    }
    req = "XPUT";
    if (Array.IndexOf((new string[] {"PUT", "POST"}), req) >= 0)  {
        Console.WriteLine("one.2.B"); // false
    }
    req = "PUTX";
    if (Array.IndexOf((new string[] {"PUT", "POST"}), req) >= 0)  {
        Console.WriteLine("one.2.C"); // false
    }
    req = "UT";
    if (Array.IndexOf((new string[] {"PUT", "POST"}), req) >= 0)  {
        Console.WriteLine("one.2.D"); // false
    }
    req = "PU";
    if (Array.IndexOf((new string[] {"PUT", "POST"}), req) >= 0)  {
        Console.WriteLine("one.2.E"); // false
    }
    req = "POST";
    if (Array.IndexOf((new string[] {"PUT", "POST"}), req) >= 0)  {
        Console.WriteLine("two.2.A");  // IS TRUE
    }
    req = "ASD";
    if (Array.IndexOf((new string[] {"PUT", "POST"}), req) >= 0)  {
        Console.WriteLine("three.2.A");  // false
    }

    Console.WriteLine("-----");
    req = "PUT";
    if ((new string[] {"PUT", "POST"}.Contains(req)))  {
        Console.WriteLine("one.3.A"); // IS TRUE
    }
    req = "XPUT";
    if ((new string[] {"PUT", "POST"}.Contains(req)))  {
        Console.WriteLine("one.3.B");  // false
    }
    req = "PUTX";
    if ((new string[] {"PUT", "POST"}.Contains(req)))  {
        Console.WriteLine("one.3.C");  // false
    }
    req = "UT";
    if ((new string[] {"PUT", "POST"}.Contains(req)))  {
        Console.WriteLine("one.3.D");  // false
    }
    req = "PU";
    if ((new string[] {"PUT", "POST"}.Contains(req)))  {
        Console.WriteLine("one.3.E");  // false
    }
    req = "POST";
    if ((new string[] {"PUT", "POST"}.Contains(req)))  {
        Console.WriteLine("two.3.A");  // IS TRUE
    }
    req = "ASD";
    if ((new string[] {"PUT", "POST"}.Contains(req)))  {
        Console.WriteLine("three.3.A");  // false
    }

    Console.ReadKey();
    }
}

আপনার দ্বিতীয় দুটি বিকল্প প্রথমটিতে একই জিনিসটি করে না।
কাইল ডেলাানি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.