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


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.