সূচকের অ্যারে বিদ্যমান আছে?


91

আমি কার্যত এমন কিছু কোড উত্তরাধিকার সূত্রে পেয়েছি যার সত্যই দুর্গন্ধ রয়েছে। আমি সবচেয়ে বেদনাদায়ক সমাধান সম্ভবত খুঁজে পেতে আশা করছি।

কিছু স্বেচ্ছাসেবী সংখ্যা একটি অ্যারেতে বৈধ উপাদান কিনা তা পরীক্ষা করার কোনও উপায় আছে?

উদাহরণ - অ্যারে [25] উপস্থিত আছে কিনা তা আমার চেক করা দরকার।

সারিগুলি সন্ধানের জন্য অ্যারে দিয়ে অগ্রণীতা () না করেই আমি পছন্দ করি।

এটি করার কোনও উপায় আছে, বা আমি ফোরচ লুপের সাথে আটকে আছি?


আপনার অর্থ কি আপনি জানতে চান অ্যারের [x] == 25 এর জন্য কিছু মান আছে কিনা? আমি মনে করি আপনি অ্যারে [25] উপস্থিত আছেন কিনা তা জিজ্ঞাসা করে আপনি যা জিজ্ঞাসা করছেন সে সম্পর্কে আপনি মানুষকে বিভ্রান্ত করছেন। অবশ্যই অ্যারেতে 26 বা ততোধিক উপাদান উপস্থিত থাকলে এটি বিদ্যমান তবে আপনি যা চাইছেন তা আমি মনে করি না।
কেভিন 42

আমি যে প্রোগ্রামটিতে কাজ করছি তাতে দুটি সম্ভাব্য অ্যারে রয়েছে যা একই ফাইলের নাম ধারণ করে। একটিতে 21 টি উপাদান রয়েছে এবং অন্যটির 30 টি কিছু রয়েছে। অ্যারেতে আমার মান প্রয়োজন [25] এটি থাকা উচিত।
স্প্ল্যাটো

উত্তর:


145

দৈর্ঘ্য পরীক্ষা করুন

int index = 25;
if(index < array.Length)
{
    //it exists
}

4
ধন্যবাদ আমি বিশ্বাস করতে পারি না আমি দৈর্ঘ্যের সম্পত্তিটির কথা ভাবি নি!
স্প্ল্যাটো

13
সেই সূচকটিও> = 0 নিশ্চিত করুন।
আন্দ্রেয়াস গ্রেচ

4
এবং নিশ্চিত হয়ে নিন যে অ্যারেটি নিজেই বাতিল নয় :)
শিমি ওয়েটস্যান্ডলার

4
কারণ অ্যারে সূচকগুলি সি # তে ক্রমিক হতে হবে এটি সত্য। সংগ্রহের ধরণগুলি রয়েছে যার ক্রমিক সূচি নেই, তবে সেগুলি সি # তে মৌলিক অ্যারে প্রকার নয়।
reor

104

এটি অর্জনের জন্য আপনি লিনকিউ ব্যবহার করতে পারেন:

var exists = array.ElementAtOrDefault(index) != null;

4
ধন্যবাদ, আনাড়ি অ্যারে দৈর্ঘ্যের চেকের পরিবর্তে আমি এটিই খুঁজছিলাম।
স্টারসেকার

7
গৌণ নোট, যেহেতু 0 এ উপাদানটি রয়েছে তাই new object[]{ null }.ElementAtOrDefault(index)ফিরে আসবে । ব্যবহার পরীক্ষণ অ্যারের সূচকগুলি একটি মহান সমাধান নয় অস্তিত্ব , যে সমতা চেক শেষে যোগ ফলাফল অনির্ণেয় করে তোলে। null nullElementAtOrDefault
ক্রিস মেরিসিক

@ ক্রিসমারিসিক আপনি কি দয়া করে একটি উদাহরণ দিতে পারেন?
এফএমএফএফ

4
@ ক্রিসমারিজিক আপনি ঠিক বলেছেন, যদি আপনি কেবল অস্তিত্বের জন্য পরীক্ষা করতে চান তবে array.Length > index
শিমি ওয়েইজহ্যান্ডলারের

4
@ChrisMarisic, আসলে এই একটি প্রধান নোট, ভালো সমাধান লুকানো বাগ হতে হবে
AMD

21

"একটি বৈধ উপাদান" বলতে আপনার অর্থ কী? আপনি ঠিক করতে পারেন:

if (array.Length >= 26)

যা আপনাকে বলবে যে 25টি অ্যারেতে একটি বৈধ সূচক কিনা তা (একটি 0 নিম্ন বাউন্ড ধরে)।

এটি অকার্যকর বা না তা আপনার যদি জানতে প্রয়োজন তবে কেবল ব্যবহার করুন:

if (array[25] != null)

(বা দুজনের সংমিশ্রণ)।

যদি এগুলি সাহায্য না করে তবে আপনার সমস্যার জন্য দয়া করে "বৈধ" এর আরও সুনির্দিষ্ট অর্থ দিন।


4
দ্বিতীয় উদাহরণের জন্য আমি এটি পেয়েছি। Index was outside the bounds of the array
মুহাম্মদ রহিল

4
@ ইরহিল: ঠিক আছে তবে মনে হচ্ছে এর পরিবর্তে আপনি প্রথম পরীক্ষাটি ব্যবহার করা উচিত ছিল ...
জন স্কিটি

12

ধরে নিচ্ছি আপনিও আইটেমটি বাতিল নয় কিনা তা পরীক্ষা করতে চান

if (array.Length > 25 && array[25] != null)
{
    //it exists
}

4
নোট: পেয়েছেন ব্যবহার করতে &&মধ্যে if (array.Length > 25 && array[25] != null), যদি ব্যবহার একক &IndexOutOfRange ব্যতিক্রম নিক্ষেপ করা হবে। দুটিই MSDN
চেকসাম

3
// I'd modify this slightly to be more resilient to a bad parameter
// it will handle your case and better handle other cases given to it:

int index = 25;

if (index >= 0 && index < array.Length)
{
    // Array element found
}

1

আপনি অ্যারের দৈর্ঘ্যটি ব্যবহার করতে পারেন এবং দেখুন যে আপনার স্বেচ্ছাসেবী সংখ্যাটি এই ব্যাপ্তিতে ফিট করে। উদাহরণস্বরূপ, যদি আপনার 10 মাপের অ্যারে থাকে তবে অ্যারে [25] বৈধ নয় কারণ 25 10 এর চেয়ে কম নয়।


1

আপনি বরং একটি তালিকা ব্যবহার করতে পারেন, যাতে আপনি অস্তিত্ব পরীক্ষা করতে পারেন।

List<int> l = new List<int>();
l.Add(45);
...
...

if (l.Count == 25) {
  doStuff();
}
int num = 45;
if (l.Contains(num)) {
  doMoreStuff();
}


0

সূচিটি অ্যারের দৈর্ঘ্যের চেয়ে কম কিনা তা আপনি পরীক্ষা করতে পারেন। এটি নালগুলি বা অন্যান্য বিজোড় মামলার জন্য যাচাই করে না যেখানে সূচকে কোনও মূল্য নির্ধারিত করা যেতে পারে তবে একটি স্পষ্টভাবে দেওয়া হয়নি।


0

অ্যারেটিতে থাকা আইটেমটি 25 টি বৈধ কিনা তা দেখতে আপনি অ্যারের দৈর্ঘ্য পরীক্ষা করতে পারেন can

if (array.Length > 25)
{ 
   if (array[25] != null)
   {
       //good
   }
}

অ্যারে আইটেমটি নিজেই সেট করা আছে কিনা তা দেখতে।


0

দেখে মনে হচ্ছে আপনি বিভিন্ন ক্ষেত্র সংরক্ষণের জন্য অ্যারে ব্যবহার করছেন। এটি অবশ্যই একটি কোড গন্ধ। আমি উচ্চতর স্তরের কোডগুলিতে সাধারণত যথাযথ (বা প্রয়োজনীয়) উপযুক্ত না হওয়ায় যতটা সম্ভব অ্যারে ব্যবহার করা এড়াতে চাই।

একটি সাধারণ অভিধানে স্যুইচ করা স্বল্পমেয়াদী একটি কার্যক্ষম বিকল্প হতে পারে। হিসাবে একটি বড় সম্পত্তি ব্যাগ ক্লাস ব্যবহার করবে। বিকল্প প্রচুর আছে। আপনার এখন সমস্যাটি হ'ল খারাপ ডিজাইনের একটি লক্ষণ, আপনার কেবল খারাপ ডিজাইনের প্যাচিংয়ের পরিবর্তে অন্তর্নিহিত সমস্যাটি ঠিক করার দিকে লক্ষ্য করা উচিত তাই এটি এখনকার জন্য, বেশিরভাগ ক্ষেত্রেই কাজ করে।

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