উত্তর:
Arrays
ইউটিলিটি ক্লাস ব্যবহার করে এটি সম্পাদন করার কয়েকটি উপায় রয়েছে ।
যদি অ্যারে বাছাই না করা হয় এবং আদিমদের অ্যারে না হয় :
java.util.Arrays.asList(theArray).indexOf(o)
অ্যারেটি যদি প্রাথমিক হয় এবং বাছাই না হয় তবে কেরেম বায়ডোয়ানস , অ্যান্ড্রু ম্যাককিনলে বা মিশাক্সের মতো উত্তরগুলির মধ্যে একটির দেওয়া সমাধান ব্যবহার করা উচিত । উপরের কোডটি theArray
আদিম হলেও সংকলন করবে (সম্ভবত একটি সতর্কতা নির্গমন করছে) তবে তবুও আপনি সম্পূর্ণ ভুল ফলাফল পাবেন।
অ্যারে বাছাই করা থাকলে, আপনি সম্পাদনার জন্য বাইনারি অনুসন্ধান ব্যবহার করতে পারেন:
java.util.Arrays.binarySearch(theArray, o)
T...
আসল রান-টাইম টাইপ হয় T[]
এবং শূন্য বা ততোধিক প্রকারের প্যারামিটারগুলিতে পাস T
করার ফলে সেগুলি একটি নতুন নির্মিত অ্যারেতে আবৃত হয়ে উত্তীর্ণ হয়। যদি পাস করা প্যারামিটারটি ইতিমধ্যে টাইপের হয় T[]
তবে সিনট্যাকটিক চিনিকে বাইপাস করা হবে।
.indexOf
) আদিমদের পক্ষে বৈধ নয়।
Arrays.toList(list).sublist(from,to).indexOf(o)
সীমার মধ্যে একটি উপাদান অনুসন্ধান করতে ব্যবহার করুন [from, to)
।
অ্যারের কোনও indexOf()
পদ্ধতি নেই।
সম্ভবত এই অ্যাপাচি কমন্স ল্যাং ArrayUtils
পদ্ধতিটি আপনি যা খুঁজছেন তা
import org.apache.commons.lang3.ArrayUtils;
String[] colours = { "Red", "Orange", "Yellow", "Green" };
int indexOfYellow = ArrayUtils.indexOf(colours, "Yellow");
আদিমদের জন্য , আপনি যদি বক্সিং এড়াতে চান তবে পেয়ারাতে আদিম অ্যারেগুলির জন্য সহায়ক রয়েছে যেমন Ints.indexOf (int [] অ্যারে, আন্ত লক্ষ্য)
কেউ নেই. হয় একটি java.util.List
* ব্যবহার করুন , বা আপনি নিজের লিখতে পারেন indexOf()
:
public static <T> int indexOf(T needle, T[] haystack)
{
for (int i=0; i<haystack.length; i++)
{
if (haystack[i] != null && haystack[i].equals(needle)
|| needle == null && haystack[i] == null) return i;
}
return -1;
}
* আপনি ব্যবহার করে আপনার অ্যারে থেকে একটি তৈরি করতে পারেন Arrays#asList()
T
বিভ্রান্তিকর। এটি কোনও ধরণের সুরক্ষা সরবরাহ করে না, ভুল করা সহজ এটি নিরাপদ প্রকারের ... আরও ভাল ব্যবহারের উদ্দেশ্য
indexOf("str", new Object[] {});
,indexOf(new Object(), new String[] {});
indexOf("str", new Date[] {})
,indexOf(new Date(), new String[] {})
C # ভিন্ন আপনি যেখানে Array.IndexOf পদ্ধতি, এবং JavaScript যেখানে আপনি indexOf মধ্যে পদ্ধতি, জাভার এপিআই ( Array
এবং Arrays
বিশেষ করে ক্লাস) যেমন কোন পদ্ধতি আছে।
এই পদ্ধতিটি সূচকফ (তার পরিপূরক লাস্ট ইন্ডেক্সঅফের সাথে একসাথে) java.util.List ইন্টারফেসে সংজ্ঞায়িত হয়েছে । নোট করুন যে সূচিপত্রফ এবং সর্বশেষআইডেক্সফ ওভারলোড করা হয়নি এবং কেবলমাত্র প্যারামিটার হিসাবে একটি অবজেক্ট গ্রহণ করুন।
যদি আপনার অ্যারে বাছাই করা হয় , আপনি ভাগ্যবান কারণ অ্যারে ক্লাস বাইনারি অনুসন্ধান পদ্ধতির একাধিক ওভারলোডের সংজ্ঞা দেয় যা আপনি সবচেয়ে ভাল সম্ভাব্য পারফরম্যান্স (ও (লগ এন) এর পরিবর্তে ও (এন এর পরিবর্তে সন্ধান করছেন যে উপাদানটির সূচকটি খুঁজে পাবেন) ), সূচকটি আপনি সূচিপত্র দ্বারা সিক্যুয়াল অনুসন্ধান থেকে কী আশা করতে পারেন)। চারটি বিবেচনা আছে:
অ্যারেটিকে প্রাকৃতিক ক্রমে বা তুলনামূলকভাবে সাজানো হবে যা আপনি একটি যুক্তি হিসাবে সরবরাহ করেছেন বা খুব কমপক্ষে সমস্ত উপাদান যা "এর চেয়ে কম" থাকে অ্যারেতে থাকা উপাদানগুলির আগে উপস্থিত হওয়া উচিত এবং সমস্ত উপাদান অ্যারের মধ্যে সেই এলিমেন্টের পরে কী অবশ্যই "এর চেয়ে বড়" হবে;
আপনি যে পরীক্ষাটি সাধারণত সূচকগুলিতে করেন তা নির্ধারণ করতে কোনও কী কী অ্যারেতে রয়েছে তা নির্ধারণ করুন (ফেরতের মান -1 নয় কিনা তা যাচাই করুন) বাইনারি অনুসন্ধানের সাথে রাখে না। আপনাকে যাচাই করতে হবে যে রিটার্নের মান শূন্যের চেয়ে কম নয়, যেহেতু প্রত্যাবর্তিত মানটি কীটি উপস্থিত নেই তা নির্দেশ করবে তবে যে সূচকটি এটি উপস্থিত থাকলে তা প্রত্যাশা করা হত;
যদি আপনার অ্যারেতে একাধিক উপাদান থাকে যা চাবির সমান হয়, আপনি বাইনারি অনুসন্ধান থেকে যা পান তা অপরিজ্ঞাত; এটি সূচক থেকে পৃথক যা প্রথম উপস্থিতি এবং সর্বশেষ ঘটনাটি ফিরে আসবে এমন সর্বশেষতম ইনডেক্সও অফ করবে will
এটিতে প্রথমে সমস্ত ফলস এবং তারপরে সমস্ত ট্রু রয়েছে তবে বুলিয়ানগুলির একটি অ্যারে বাছাই করা হতে পারে but বাইনারি অনুসন্ধান পদ্ধতির কোনও ওভাররাইড নেই যা বুলিয়ানগুলির একটি অ্যারে গ্রহণ করে এবং আপনাকে ও (লগ এন) পারফরম্যান্স করতে চাইলে সেখানে কোনও চালাক কিছু করতে হবে, উদাহরণস্বরূপ একটি অ্যারে ব্যবহার করে উদাহরণস্বরূপ বুলিয়ানস এবং ধ্রুবকগুলি বুলিয়ান F ফ্যালস এবং বুলিয়ান T ট্রু
যদি আপনার অ্যারে বাছাই না করা হয় এবং আদিম ধরণের না হয় তবে আপনি অনুরোধের মাধ্যমে তালিকার সূচিপত্র ও সর্বশেষ তালিকাভুক্ত পদ্ধতিগুলি ব্যবহার করতে পারেন asList java.util.Arrays পদ্ধতি। এই পদ্ধতিটি আপনার অ্যারের চারপাশে একটি অ্যাবস্ট্রাকলিস্ট ইন্টারফেস মোড়ক ফিরবে। এটি অ্যারে একটি অনুলিপি তৈরি না করে এটি ন্যূনতম ওভারহেড জড়িত। উল্লিখিত হিসাবে, এই পদ্ধতিটি অতিরিক্ত লোড করা হয়নি তাই এটি কেবলমাত্র রেফারেন্স ধরণের অ্যারেগুলিতেই কাজ করবে।
আপনার অ্যারের সাজানো না হয় তাহলে এবং অ্যারে ধরণ হয় আদিম , আপনি জাভা এপিআই সঙ্গে ভাগ্য সীমার বাইরে। লুপের জন্য আপনার নিজের বা আপনার নিজস্ব স্ট্যাটিক ইউটিলিটি পদ্ধতির জন্য লিখুন, এতে অবশ্যই ASList পদ্ধতির উপর পারফরম্যান্স সুবিধাগুলি থাকবে যার মধ্যে কোনও অবজেক্ট ইনস্ট্যান্টিয়েশনের কিছু ওভারহেড জড়িত। আপনি যদি উদ্বিগ্ন হন যে লুপের জন্য একটি ব্রুট ফোর্স যে অ্যারের সমস্ত উপাদানগুলির উপরে পুনরাবৃত্তি হয় তা মার্জিত সমাধান নয়, আপনি যখন ইন্ডেক্স অফে কল করবেন তখন জাভা এপিআই ঠিক তা করছে তা গ্রহণ করুন। আপনি এই জাতীয় কিছু তৈরি করতে পারেন:
public static int indexOfIntArray(int[] array, int key) {
int returnvalue = -1;
for (int i = 0; i < array.length; ++i) {
if (key == array[i]) {
returnvalue = i;
break;
}
}
return returnvalue;
}
আপনি যদি এখানে নিজের পদ্ধতি লেখার বিষয়টি এড়াতে চান তবে পেয়ারা জাতীয় বিকাশের কাঠামো থেকে এটি ব্যবহার করার বিষয়টি বিবেচনা করুন। তোমাদের মধ্যে একটি বাস্তবায়ন আছে জানতে পারেন indexOf মধ্যে এবং lastIndexOf ।
আমি নিজের জন্য কোডিং ব্যতীত অ্যারেগুলিতে "ইনডেক্সফ" এর কথা মনে করি না ... যদিও আপনার অ্যারেতে আদিম ধরণের রয়েছে তবে আপনি সম্ভবত অনেকগুলি java.util.Arrays#binarySearch(...)
পদ্ধতির একটি ব্যবহার করতে পারেন ( অ্যারে জাভাদোক দেখুন )
তালিকার ইন্টারফেসের একটি সূচিপত্র () পদ্ধতি রয়েছে এবং আপনি অ্যারের অ্যাসলিস্ট () পদ্ধতির সাহায্যে আপনার অ্যারে থেকে একটি তালিকা পেতে পারেন। তা ছাড়া আরে নিজেই এ জাতীয় কোনও পদ্ধতি নেই। বাছাই করা অ্যারেগুলির জন্য এটিতে বাইনারি অনুসন্ধান () পদ্ধতি রয়েছে।
আপনি সম্ভবত java.util.ArrayList এর কথা ভাবছেন, অ্যারে নয়।
জেফ্রি হ্যান্টিনের উত্তরটি ভাল তবে এর কিছু বাধা আছে, যদি এটি এটি এই কাজ করে বা অন্যথায় ...
আপনি নিজের এক্সটেনশন পদ্ধতিটি লিখতে পারেন এবং এটি সর্বদা আপনার পছন্দ মতো কাজ করে।
Lists.indexOf(array, x -> item == x); // compare in the way you want
এবং এখানে আপনার এক্সটেনশন
public final class Lists {
private Lists() {
}
public static <T> int indexOf(T[] array, Predicate<T> predicate) {
for (int i = 0; i < array.length; i++) {
if (predicate.test(array[i])) return i;
}
return -1;
}
public static <T> int indexOf(List<T> list, Predicate<T> predicate) {
for (int i = 0; i < list.size(); i++) {
if (predicate.test(list.get(i))) return i;
}
return -1;
}
public interface Predicate<T> {
boolean test(T t);
}
}
int findIndex(int myElement, int[] someArray){
int index = 0;
for(int n: someArray){
if(myElement == n) return index;
else index++;
}
}
দ্রষ্টব্য: আপনি টাইপ ইন্টির অ্যারেগুলির জন্য এই পদ্ধতিটি ব্যবহার করতে পারেন, আপনি ছোট ছোট পরিবর্তন সহ অন্যান্য ধরণের ক্ষেত্রেও এই অ্যালগরিদমটি ব্যবহার করতে পারেন