Dalam suatu fungsi def a(l: List[(Int, String)]): List[(Int, String)] = ??? saya ingin membagi sebuah String menjadi kata-kata mereka dalam huruf kecil. Koma dll. harus diabaikan, jadi saya rasa saya perlu replaceAll("[^A-Za-z]+", " ").toLowerCase() di suatu tempat? Nilai Int harus tetap sama seperti dalam kalimat.

Contoh cara kerjanya:

val example = List((11, "That is great!"), (12, "Wow, impossible!"))
print(a(example)) 

Hasil

List((11, "that"),(11, "is"),(11, "great"),(12, "wow"),(12, "impossible"))
3
fleo 25 Mei 2021, 21:31

2 jawaban

Jawaban Terbaik

Anda dapat menggunakan flatMap untuk itu:

val example = List((11, "That is great!"), (12, "Wow, impossible!"))
example.flatMap { case (int, str) =>
  str
    .replaceAll("[^A-Za-z]+", " ")
    .toLowerCase()
    .split(' ')
    .map((int, _))
}

Hasil:

res0: List[(Int, String)] = List((11,that), (11,is), (11,great), (12,wow), (12,impossible))
4
Yuval Itzchakov 25 Mei 2021, 18:36

Ini benar-benar setara dengan jawaban Yuval, tetapi mungkin lebih mudah didekati ketika memulai dengan Scala

for {
  (int, str) <- example
  word <- str.replaceAll("[^A-Za-z]+", " ").toLowerCase().split(' ')
} yield (int, word)

1
francoisr 25 Mei 2021, 20:24