एक शर्त के साथ लूप चलने की संख्या की गणना कैसे करें, उदाहरण के लिए:

var count = 0
while (stk.isNotEmpty()) {
  stack.pop()
  count++
}

लेकिन इसमें एक अस्थायी काउंटर और म्यूटेशन शामिल है। क्या किसी अस्थायी चर और उत्परिवर्तन का उपयोग किए बिना एक बेहतर मुहावरेदार और घोषणात्मक तरीका है। मैं इस तरह कुछ के साथ आ सकता हूं, लेकिन यह हैकी महसूस करता है:

val count = stk.takeWhile { stk.isNotEmpty() }.also { stk.pop() }.count()
0
Gopal S Akshintala 22 जिंदा 2020, 13:23

1 उत्तर

सबसे बढ़िया उत्तर

कोटलिन मानक पुस्तकालय वह प्रदान नहीं करता है जिसकी आप तलाश कर रहे हैं, लेकिन आप कुछ ऐसा बना सकते हैं जिसे आप स्वयं खोज रहे हैं:

fun repeatWhile(condition: () -> Boolean, action: () -> Unit): Int {
    var count = 0
    while (condition()) {
        action()
        count++
    }
    return count
}

और इसे इस तरह इस्तेमाल करें:

val stack = Stack<Int>()
stack.push(1)
stack.push(2)
stack.push(3)

val count = repeatWhile({ stack.isNotEmpty() }) {
    stack.pop()
}

println(count) // 3

व्यक्तिगत रूप से, मुझे नहीं लगता कि यह समय-लूप और काउंटर वैरिएबल को कॉल-साइट पर उजागर करने से बेहतर है, जैसा आपने अपने प्रश्न में किया था।

1
Willi Mentzel 22 जिंदा 2020, 15:53