2016-11-19 6 views
5

क्या कोटलिन में भागों को विभाजित करने का कोई आसान तरीका है (शायद कुछ लैम्ब्डा)?भागों में विभाजन को विभाजित करें

उदाहरण के लिए:

[1, 2, 3, 4, 5, 6] => [[1, 2], [3, 4], [5, 6]] 
+1

एक सुविधा Kotlin 1.1 के लिए अनुरोध किया है कि: https://github.com/Kotlin/KEEP/blob/master/proposals/stdlib/window-sliding.md – succcubbus

+0

संभावित डुप्लिकेट: http://stackoverflow.com/q/ 34498368/3255152 – mfulton26

+2

यदि आप _two_ भागों में विभाजन करना चाहते हैं, तो https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/partition.html वह करना होगा जो आप करना चाहते हैं। जैसे 'list.partition {x -> x <4}' – carpeliam

उत्तर

10

सूची को देखते हुए: val list = listOf(1, 2, 3, 4, 5, 6) आप उपयोग कर सकते groupBy:

list.groupBy { (it + 1)/2 }.map { it.value } 

या अगर अपने मूल्यों नहीं हैं संख्या आप पहले उन्हें एक इंडेक्स असाइन कर सकते हैं:

list.withIndex() 
    .groupBy { it.index/2 } 
    .map { it.value.map { it.value } } 

या आप कुछ आवंटन को बचाने के लिए आप foldIndexed साथ थोड़ा और मैनुअल रास्ता तय कर सकते हैं चाहते हैं, तो:

list.foldIndexed(ArrayList<ArrayList<Int>>(list.size/2)) { index, acc, item -> 
    if (index % 2 == 0) { 
     acc.add(ArrayList(2)) 
    } 
    acc.last().add(item) 
    acc 
} 
+1

['groupBy'] के लिए (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/group-by.html)," लौटा नक्शा मूल संग्रह से उत्पादित चाबियों के प्रवेश पुनरावृत्ति आदेश को संरक्षित करता है। " इस प्रकार, आपका पहला उदाहरण 'list.groupBy {(it + 1)/2} .values' के लिए सरलीकृत किया जा सकता है। – mfulton26

+0

कोटलिन के पास ['इंडेक्स 'के साथ] (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/with-index.html) है जो आपका दूसरा उदाहरण थोड़ा और पठनीय भी बना सकता है:' सूची .withIndex()। समूह द्वारा {it.index/2} .values.map {it.map {it.value}} '। – mfulton26

+0

@ mfulton26 नोटिस के लिए धन्यवाद, तदनुसार जवाब अपडेट किया गया। – miensol

2

एपीआई का कहना है एक GroupBy समारोह है, जो आप चाहते क्या करना चाहिए नहीं है।

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/group-by.html

या sublist का उपयोग करें और यह अपने आप को तोड़ने के

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/sub-list.html

संबंधित मुद्दे