অ্যারেলিস্টে আইটেমের সূচি খুঁজে পাওয়ার আরও ভাল উপায়?


91

একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশানের জন্য, আমার নিম্নলিখিত কার্যকারিতা রয়েছে

private ArrayList<String> _categories; // eg ["horses","camels"[,etc]]

private int getCategoryPos(String category) {
    for(int i = 0; i < this._categories.size(); ++i) {
        if(this._categories.get(i) == category) return i;
    }

    return -1;
}

কোনও উপাদানটির অবস্থান পাওয়ার জন্য কোনও ফাংশন লেখার কি এটিই "সেরা" উপায়? বা জাভাতে আমার কল্পনা করা উচিত এমন কোনও অভিনব শানসি নেটিভ ফাংশন?


4
এই কোডটি সম্ভবত ত্রুটিযুক্ত: ==বেশিরভাগ ক্ষেত্রে ব্যবহারের ফলে ভুল ফলাফল পাওয়া যাবে।

4
মনে রাখবেন, আপনি '==' এর সাথে স্ট্রিং তুলনা করতে পারবেন না, আপনাকে স্ট্রিং.ইকুয়ালস (স্ট্রিং স্ট্রিং) ব্যবহার করতে হবে
মিঃজান্ডার

4
@ মিঃজান্ডার নিশ্চিত যে আপনি তাদের সাথে তুলনা করতে পারেন ==... এটি কেবল সঠিক ধরণের তুলনা নয় ;-)

আপনি বলতে পারেন আমি এখনও জাভাতে নতুন আছি .. জাভাস্ক্রিপ্টের মতো কোনও ভাষাতে String.equalsকি এর চেয়ে বেশি পছন্দ ===? যেমন মান এবং প্রকারের বিরুদ্ধে চেক?
জ্যাকসনকর

4
নং == হল অবজেক্ট পরিচয় এবং এটা মানে "একই বস্তুর হয়" । (এই মতামতটি আদিম মানের পাশাপাশি রেফারেন্সের ধরণের ক্ষেত্রেও সত্য, যদি আপনি বিবেচনা করেন তবে ৪২ বা চর 'x' ইত্যাদি মানের সাথে একটি সংখ্যা রয়েছে)। সমস্ত বস্তুর দৃষ্টান্তের জন্য সংজ্ঞায়িত Object.equalsএকটি ভার্চুয়াল পদ্ধতি এবং এর অর্থ "একই মান রয়েছে" , যেহেতু সমস্ত শ্রেণীর প্রকার অবজেক্টকে প্রসারিত করে এবং সমস্ত অবজেক্ট-সমতা পরীক্ষার জন্য ব্যবহার করা উচিত । কভার ==বনাম এ অনেক প্রশ্ন আছে Object.equalsএবং এটি বোঝার জন্য একটি খুব গুরুত্বপূর্ণ ধারণা! উদাহরণ হিসেবে বলা যায়, এই মিথ্যা: "hello" == new String("hello")! দোহ!

উত্তর:


195

ArrayListএকটি আছে indexOf()পদ্ধতি । আরও জন্য API টি দেখুন, কিন্তু এটি কীভাবে কাজ করে তা এখানে:

private ArrayList<String> _categories; // Initialize all this stuff

private int getCategoryPos(String category) {
  return _categories.indexOf(category);
}

indexOf() আপনার পদ্ধতিটি যা ফিরে আসে ঠিক তত দ্রুত ফিরে আসবে।


4
পোস্ট করা কোডের চেয়ে জটিলতার ক্ষেত্রে এটি কোনও "দ্রুত" ত্রুটি নয়, যদিও এটি আরও দক্ষতার সাথে প্রয়োগ করা যেতে পারে। এছাড়াও, সূচকগুলি এখানে কিছুটা ভিন্নভাবে প্রতিক্রিয়া জানাবে: মূল কোড [ভুলভাবে] ব্যবহার করে ==যখন সূচিপত্র ব্যবহার করে equals()

প্রকৃতপক্ষে, এটি প্রায় একই কোড (কমপক্ষে আমার কাছে সান জাভা 6 কোডের মধ্যে রয়েছে) ব্যতীত, তারা এটি যদি একটি if-অন্য শাখা দিয়ে শুরু করে যা নালকে পৃথকভাবে পরিচালনা করে।
ysavit

এটি তারযুক্ত পুরানো অ্যারে এবং তালিকা <> ফাইন্ড ইন্ডেক্স () পদ্ধতি রয়েছে তবে অ্যারেলিস্টের জন্য API এর মাঝামাঝি পরিবর্তন: ডি
বোকটুলাস

16
ArrayList<String> alphabetList = new ArrayList<String>();
alphabetList.add("A"); // 0 index
alphabetList.add("B"); // 1 index
alphabetList.add("C"); // 2 index
alphabetList.add("D"); // 3 index
alphabetList.add("E"); // 4 index
alphabetList.add("F"); // 5 index
alphabetList.add("G"); // 6 index
alphabetList.add("H"); // 7 index
alphabetList.add("I"); // 8 index

int position = -1;
position = alphabetList.indexOf("H");
if (position == -1) {
    Log.e(TAG, "Object not found in List");
} else {
    Log.i(TAG, "" + position);
}

আউটপুট: তালিকা সূচক: 7

আপনি যদি এইচ পাস করেন তবে এটি 7 ফিরে আসবে , আপনি জে পাস করলে এটি -1 ফিরে আসবে কারণ আমরা ডিফল্ট মান -1 এ সংজ্ঞায়িত করেছি।

সম্পন্ন


আমি কিভাবে করতে পারেন এই ভীসা বিপরীতভাবে, আপনার সমাধান জন্য আপনার ইনপুট হয় এইচ এবং আপনি অবস্থান পেতে এইচ , ধরুন যদি আমার ইনপুটের সূচক 7 আমি কিভাবে যে সূচক স্ট্রিং মান পেতে পারেন। আপনাকে ধন্যবাদ
জিমালে আব্বি

4
@ জিমালেআবদী আপনার অ্যারলিস্ট.ডুয়েট করুন (7)। 7 আপনার অবস্থান।
হিরেন প্যাটেল

6

যদি আপনার Listসাজানো থাকে এবং ভাল এলোমেলো অ্যাক্সেস থাকে (যেমনটি ArrayListহয়), আপনার উচিত Collections.binarySearch। অন্যথায়, আপনার ব্যবহার করা উচিত List.indexOf, যেমন অন্যরা উল্লেখ করেছে।

তবে আপনার অ্যালগরিদমটি সুগঠিত, অন্যান্য ( ==অন্যরা ইঙ্গিত করেছেন ব্যতীত)।


3

জাভাতে সত্যিই একটি অভিনব শানসি নেটিভ ফাংশন রয়েছে যা আপনার উচিত।

অ্যারেলিস্টের একটি উদাহরণ পদ্ধতি রয়েছে

indexOf(Object o)

(http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html)

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

_categories.indexOf("camels")

অ্যান্ড্রয়েডের জন্য প্রোগ্রামিং নিয়ে আমার কোনও অভিজ্ঞতা নেই - তবে এটি একটি স্ট্যান্ডার্ড জাভা অ্যাপ্লিকেশনের জন্য কাজ করবে।

শুভকামনা।


4
নেটিভ ফাংশন আমার কাছে সি \ সি ++ বোঝায়..জাস্ট কথাটি।
হান্টার ম্যাকমিলেন

3

জাভা এপিআই নির্দিষ্ট করে দুটি পদ্ধতি আপনি ব্যবহার করতে পারে: indexOf(Object obj)এবং lastIndexOf(Object obj)। যদি প্রথমটি পাওয়া যায় তবে এটির সূচকটি পাওয়া যায়, অন্যথায় -1। দ্বিতীয়টি সর্বশেষ সূচকটি দেয়, এটি তালিকার পিছনে সন্ধান করার মতো।


1

তালিকার আইটেমের অবস্থান সন্ধানের সর্বোত্তম উপায় হ'ল সংগ্রহ ইন্টারফেস ব্যবহার করে,

যেমন,

List<Integer> sampleList = Arrays.asList(10,45,56,35,6,7);
Collections.binarySearch(sampleList, 56);

আউটপুট: 2



0

এখানে সেরা সমাধান

class Category(var Id: Int,var Name: String)
arrayList is Category list
val selectedPositon=arrayList.map { x->x.Id }.indexOf(Category_Id)
spinner_update_categories.setSelection(selectedPositon)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.