সি # তে কীভাবে আমি অগ্রণী লুপ থেকে ঝাঁপিয়ে পড়ব?


124

foreachযদি উপাদানগুলির মধ্যে একটির প্রয়োজনীয়তা পূরণ হয় তবে আমি সি # এর লুপ থেকে কীভাবে বিচ্ছিন্ন হব ?

উদাহরণ স্বরূপ:

foreach(string s in sList){
      if(s.equals("ok")){
       //jump foreach loop and return true
     }
    //no item equals to "ok" then return false
}

হাস্যকর. পাইথনে আপনি সহজেই করতেন return "ok" in sList:- সি # তে তুলনীয় কিছু নেই কি?
টিম পিটজ্যাকার

8
@ টিম পিটজেকার: অবশ্যই আছে, ব্যয়ের উত্তর দেখুন। আসলে, লিনকের অভ্যস্ত হওয়ার পরে, অনেকগুলি আবশ্যক কোডটি গুহা আঁকার মতো লাগে।
R0MANARMY

উত্তর:


220
foreach (string s in sList)
{
    if (s.equals("ok"))
        return true;
}

return false;

বিকল্পভাবে, আইটেমটি সন্ধান করার পরে আপনার যদি আরও কিছু জিনিস করার প্রয়োজন হয়:

bool found = false;
foreach (string s in sList)
{
    if (s.equals("ok"))
    {
        found = true;
        break; // get out of the loop
    }
}

// do stuff

return found;

6
আমি দ্বিতীয় উদাহরণটি আরও ভালভাবে পুনরায় লেখা হবে বলে পরামর্শ দেবbool found = callFunctionInFirstCodeSnipper(list); // do stuff
আইআরসি


55

আপনি লিনকিউ রুটটি নিয়ে স্পষ্ট লুপগুলি এড়াতে পারবেন:

sList.Any(s => s.Equals("ok"))

23
বা শুধু ব্যবহার Contains("ok")
গ্রাহাম ক্লার্ক

7
@ গ্রাহাম ক্লার্ক: Containsধরে নেওয়া হয়েছে আপনি একটি এর উপর দিয়ে পুনরাবৃত্তি করছেন ICollection<T>Anyএ জাতীয় যে কোনও কিছুর উপর কাজ করবে IEnumerable<T>এবং এই ক্ষেত্রে প্রশ্নটি স্পষ্টভাবে ইঙ্গিত দিচ্ছে না যে এটি কী ধরণের সংগ্রহের মাধ্যমে পুনরাবৃত্তি করছে ( Listএটি একটি সুন্দর ন্যায্য অনুমান যদিও)।
R0MANARMY

32
foreach (var item in listOfItems) {
  if (condition_is_met)
    // Any processing you may need to complete here...
    break; // return true; also works if you're looking to
           // completely exit this function.
}

কৌতুক করা উচিত। ব্রেক স্টেটমেন্টটি কেবল লুপটির কার্যকারিতা শেষ করবে, রিটার্নের স্টেটমেন্টটি স্পষ্টতই পুরো ফাংশনটি শেষ করে দেবে। আপনার প্রশ্নটি বিচার করে আপনি রিটার্নটি সত্য ব্যবহার করতে চাইতে পারেন; বিবৃতি।


7

breakনিকটতম এনক্লোজিং লুপটি থেকে কোনটি লাফায় আপনি তা ব্যবহার করতে পারেন বা সরাসরি সরাসরি করতে পারেনreturn true


5

'ব্রেক' স্টেটমেন্ট ব্যবহার করুন। আমি হাস্যকর মনে করি যে আপনার প্রশ্নের উত্তরটি আপনার প্রশ্নের আক্ষরিক অর্থে! যাইহোক, একটি সাধারণ গুগল অনুসন্ধান আপনাকে উত্তর দিতে পারত।


3

কেমন:

return(sList.Contains("ok"));

যদি আপনি যা করতে চান একটি "ঠিক আছে" পরীক্ষা করে উত্তরটি ফেরত দেয় তবে সেই কৌশলটি করা উচিত ...


2

এটি আপনার প্রশ্নের সরাসরি উত্তর নয় তবে আপনি যা চান তা করার অনেক সহজ উপায় রয়েছে। যদি আপনি .NET 3.5 বা তার পরে ব্যবহার করেন তবে কমপক্ষে। এটিকে এনিউরেবল। কনটেনস বলা হয়

bool found = sList.Contains("ok");


1

হয় লুপ থেকে সরাসরি ফিরে:

foreach(string s in sList){
   if(s.equals("ok")){
      return true;
   }
}

// if you haven't returned by now, no items are "ok"
return false;

বা ব্যবহার করুন break:

bool isOk = false;
foreach(string s in sList){
   if(s.equals("ok")){
      isOk = true;
      break; // jump out of the loop
   }
}

if(isOk)
{
    // do something
}

তবে আপনার ক্ষেত্রে এটির মতো কিছু করা ভাল:

if(sList.Contains("ok"))
{
    // at least one element is "ok"
}
else
{
   // no elements are "ok"
}

-2
var ind=0;
foreach(string s in sList){
    if(s.equals("ok")){
        return true;
    }
    ind++;
}
if (ind==sList.length){
    return false;
}

বেশ নিশ্চিত $যে সি # সিনট্যাক্স বৈধ নয়।
R0MANARMY

সম্ভবত না, আমি একটি জাভাস্ক্রিপ্ট / পিএইচপি লোক। তবে একটি কার্যক্ষম সমাধান প্রয়োগ করার জন্য এখানে যথেষ্ট কোড রয়েছে ... আমি removed সরিয়ে ভারে যুক্ত করেছি .. সম্ভবত এখনও সি + নয়
জনি ক্রেগ

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