আমি কীভাবে অ্যারে করতে পারি? স্ট্রিং অ্যারেতে কন্টেইনস কেস-সংবেদনশীল করতে পারি?


172

আমি Array.Containsপদ্ধতিটি স্ট্রিং অ্যারে ব্যবহার করছি । কীভাবে আমি এই কেস-সংবেদনশীল করতে পারি?

উত্তর:


307
array.Contains("str", StringComparer.OrdinalIgnoreCase);

বা নির্দিষ্ট পরিস্থিতিতে উপর নির্ভর করে আপনি পছন্দ করতে পারেন:

array.Contains("str", StringComparer.CurrentCultureIgnoreCase);
array.Contains("str", StringComparer.InvariantCultureIgnoreCase);

4
প্রতি এমএসডিএন.মাইক্রোসফট.ইন- ইউএস / লিবারি / ডিডি ৪65৫১২১.এসপিএক্স , " আক্রমণকারী সংস্কৃতিতে খুব কম সংখ্যক বৈশিষ্ট্য রয়েছে যা এটিকে তুলনার জন্য দরকারী করে তোলে।" প্রায় সব ক্ষেত্রেই যেখানে আপনি সংস্কৃতি-নির্দিষ্ট তুলনা চান না ( CurrentCulture), আপনার Ordinalপরিবর্তে ব্যবহার করা উচিত InvariantCulture।
— বিডুকস

2
@ বিডুকস এটি একটি বিবৃতিতে খুব শক্তিশালী। ব্যবহারের বৈধ কারণ রয়েছে InvariantCulture। উপরোক্ত তিনটি পছন্দের যে কোনওটির ব্যবহার পরিস্থিতি নির্ভর করে। আমি আপনার পুনর্নির্মাণে আপত্তি করি না, তবে আমি "সম্ভবত না" মন্তব্যটি সরিয়ে দিচ্ছি। এটি ইতিমধ্যে উত্তরে পরিষ্কার হয়ে গেছে যে আপনার বর্তমান পরিস্থিতিতে আপনার জন্য কাজ করে এমন একটি বাছাই করা উচিত।
— মেহরদাদ আফশারী

1
এটি বুঝতে আমার এক মুহূর্ত লেগেছিল যে কন্টেন্টগুলি সিস্টেম.লিংকের একটি এক্সটেনশন পদ্ধতি।
— ক্রেগ Celeste

লিনকিউ আবার দিন বাঁচাতে।
— ব্রায়ান্টি

@ মেহরদাদআফশারি এই ক্ষেত্রে আগের মন্তব্যটি পুরোপুরি বৈধ valid "সমন্বিত" কেবলমাত্র সাম্যতা যাচাই করা দরকার, যা সাধারণ তুলনার সাথে আরও দক্ষ। অন্যান্য "সংস্কৃতি" সচেতন তুলনাগুলি চরিত্রের ক্রমগুলির সাথে সম্পর্কিত এবং তাই কেবল বাছাইয়ের জন্য প্রাসঙ্গিক।
— user1751825

9

আমার পক্ষের কিছু গুরুত্বপূর্ণ নোট, বা কমপক্ষে কিছু বিতরণ করা তথ্য এক জায়গায় রেখে দেওয়া- উপরে স্ট্রিংকম্পার দিয়ে টিপ সম্পর্কিত মত:

if (array.Contains("str", StringComparer.OrdinalIgnoreCase))
{}
  1. array.Contains() একটি লিনকিউ এক্সটেনশন পদ্ধতি এবং অতএব প্রয়োজন অনুসারে কেবল নেট নেট ৩.৫ বা তার চেয়ে বেশি স্ট্যান্ডার্ড অনুসারে কাজ করে:
    using System;
    using System.Linq;

  2. তবে: .NET 2.0 এ সহজ Contains()পদ্ধতি (ক্ষেত্রে সংবেদনশীলতা বিবেচনায় না নিয়ে) কমপক্ষে একটি কাস্ট সহ এটি সম্ভব:

    if ( ((IList<string>)mydotNet2Array).Contains(“str”) ) {}

    যেহেতু কনটেনস () পদ্ধতিটি আইলিস্ট ইন্টারফেসের অংশ, এটি কেবল অ্যারে দিয়েই নয়, তালিকাগুলি ইত্যাদির সাহায্যেও কাজ করে works


1

অ্যাকাউন্টে কেস-সংবেদনশীলতা গ্রহণ করে এমন একটি কাস্টম আইকুয়ালিটি কম্পিউটারের প্রয়োগ করুন ।

উপরন্তু, চেক এই বাইরে। তাহলে (তত্ত্বের ভিত্তিতে) আপনাকে যা করতে হবে তা হ'ল:

myArray.Contains("abc", ProjectionEqualityComparer<string>.Create(a => a.ToLower()))

18
কারণ 5 মিনিট আগে পর্যন্ত আমি জানতাম না যে একটি স্ট্রিংকম্পার বিদ্যমান। :)
— কন

0
new[] { "ABC" }.Select(e => e.ToLower()).Contains("abc") // returns true

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