প্রতিটি কোটলিনের জন্য বর্তমান সূচকটি কীভাবে পাবেন


140

প্রতিটি লুপের জন্য সূচকটি কীভাবে পাবেন? আমি প্রতিটি দ্বিতীয় পুনরাবৃত্তির জন্য নম্বর মুদ্রণ করতে চাই

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

for (value in collection) {
    if (iteration_no % 2) {
        //do something
    }
}

জাভাতে, আমরা লুপের জন্য প্রচলিত

for (int i = 0; i < collection.length; i++)

কিভাবে পেতে i?


1
আরো দেখুন stackoverflow.com/questions/46825787/...
— s1m0nw1

উত্তর:


306

@ অডি দ্বারা প্রদত্ত সমাধানগুলি ছাড়াও রয়েছে forEachIndexed:

collection.forEachIndexed { index, element ->
    // ...
}

3
বাহ আমি মনে করি এটি আরও ভাল ... ধন্যবাদ
— অডি

1
এটি অ্যারে এবং আইটারেবলসে কাজ করে, এটির কাজ করার জন্য আপনার আর কী দরকার?
— zsmb13

আদিম জাভা অ্যারে নিয়ে বিভ্রান্ত
— অডি

breakভিতরে ব্যবহার করার কোনও উপায় ?
— লেভন পেট্রোসায়ান

আপনি পুরো লুপটি থেকে বিরতি দিতে পারবেন না, কেবল একই রকম কাজটি আপনি করতে পারেন return@forEachIndexedযা continueপরের উপাদানটিতে এড়াতে প্রয়োজনীয় হিসাবে কাজ করবে । আপনার যদি ব্রেকিং দরকার হয় তবে আপনাকে এটিকে একটি ফাংশনে returnআবদ্ধ করতে হবে এবং সেই ঘেরটি ফাংশন থেকে ফিরে আসতে লুপটিতে ব্যবহার করতে হবে।
— zsmb13

96

ব্যবহার indices

for (i in array.indices) {
    print(array[i])
}

আপনি যদি চান মূল্য পাশাপাশি সূচক ব্যবহার withIndex()

for ((index, value) in array.withIndex()) {
    println("the element at $index is $value")
}

তথ্যসূত্র: কোটলিনে নিয়ন্ত্রণ-প্রবাহ


3
আমি মনে করি এই উত্তরগুলি আরও ভাল কারণ অন্য কিছু শেখার দরকার নেই, লুপের জন্য সহজ সরল +1
— আন্ডারফিলহ

22

এটা চেষ্টা কর; লুপ জন্য

for ((i, item) in arrayList.withIndex()) { }

4
যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কীভাবে এবং / বা কেন এটি সমস্যার সমাধান করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করলে উত্তরের দীর্ঘমেয়াদী মান উন্নত হবে।
— মনিকা পুনরায় ইনস্টল করুন

এই লুপটির জন্য আমি কীভাবে একটি সীমা রাখতে পারি? এটি শেষ হওয়ার আগে অর্ধেক বা কিছু সংখ্যার আগে চলে যায়
— E.Akio


9

মনে হচ্ছে আপনি যা খুঁজছেন তা হ'ল filterIndexed

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

listOf("a", "b", "c", "d")
    .filterIndexed { index, _ ->  index % 2 != 0 }
    .forEach { println(it) }

ফলাফল:

b
d

1
এছাড়াও একটি ফাংশন রেফারেন্স ব্যবহার বিবেচনা করুন.forEach(::println)
— কিরিল রাখমান

@ কিরিলআখমান, এমন পরিস্থিতিতে ফাংশন রেফারেন্স পছন্দসই স্টাইল ব্যবহার করছেন? আমি কোটলিনে নতুন, তাই আমি এখনও এই জিনিসটি খুঁজে বের করছি।
— আকাওয়াল

আমি যখনই সম্ভব ফাংশন উল্লেখ ব্যবহার করার ঝোঁক। যখন আপনার একাধিক প্যারামিটার থাকে, তখন আপনি ল্যাম্বডা ব্যবহারের তুলনায় অনেকগুলি অক্ষর সংরক্ষণ করেন। তবে এটি অবশ্যই স্বাদের বিষয়।
— কিরিল রাখমান

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