Bagaimana cara membagi urutan menjadi dua daftar dengan predikat?
Alternatif: Saya dapat menggunakan filter
dan filterNot
, atau menulis metode saya sendiri, tetapi bukankah ada metode yang lebih umum (bawaan) yang lebih baik?
Dengan menggunakan partition
metode:
scala> List(1,2,3,4).partition(x => x % 2 == 0)
res0: (List[Int], List[Int]) = (List(2, 4),List(1, 3))
val (even, odd) = List(1,2,3,4).partition(x => x % 2 == 0)
adalah cara untuk menghancurkan tupel yang dihasilkanpartition
dengan cara yang dapat dibaca._ % 2 == 0
.Baik yang
partition
adalah hal yang Anda inginkan - ada metode lain yang juga menggunakan predikat untuk membagi daftar di dua:span
.Yang pertama, partisi akan meletakkan semua elemen "benar" dalam satu daftar, dan yang lainnya di daftar kedua.
span akan menempatkan semua elemen dalam satu daftar hingga elemen bernilai "false" (dalam istilah predikat). Sejak saat itu, ia akan menempatkan elemen-elemen tersebut dalam daftar kedua.
sumber
Anda mungkin ingin melihat scalex.org - ini memungkinkan Anda untuk mencari pustaka standar scala untuk fungsi dengan tanda tangannya. Misalnya, ketikkan yang berikut ini:
Anda akan melihat partisi .
sumber
Anda juga dapat menggunakan foldLeft jika Anda membutuhkan sesuatu yang lebih. Saya baru saja menulis beberapa kode seperti ini ketika partisi tidak memotongnya:
sumber
Saya tahu saya mungkin terlambat ke pesta dan ada jawaban yang lebih spesifik, tetapi Anda dapat memanfaatkannya
groupBy
Ini membuat kode Anda sedikit lebih tahan masa depan jika Anda perlu mengubah kondisi menjadi sesuatu yang bukan boolean.
sumber
Jika Anda ingin membagi daftar menjadi lebih dari 2 bagian, dan mengabaikan batasannya, Anda dapat menggunakan sesuatu seperti ini (ubah jika Anda perlu mencari ints)
sumber