Scala girare delimitato stringa in un Array

Ho una stringa che appare come il seguente:

"1,100,53,5000,23,3,3,4,5,5"

Voglio semplicemente trasformare questo in un Array distinti elementi di numero Intero. Qualcosa che sarebbe simile a:

Array(1, 100, 53, 5000, 23, 3, 4, 5)

C’è un String metodo di Scala che potrebbero aiutare con questo?

OriginaleL’autore randombits | 2013-11-03

4 Replies
  1. 13
    scala> "1,100,53,5000,23,3,3,4,5,5".split(",").map(_.toInt).distinct
    res1: Array[Int] = Array(1, 100, 53, 5000, 23, 3, 4, 5)

    Ovviamente questo genera un’eccezione se uno dei valori nell’array non è un numero intero.

    edit: non Avevo visto i ‘numeri distinti solo parte fissa della mia risposta.

    OriginaleL’autore Marth

  2. 7

    Un’altra versione che si occupa piacevolmente con la non facile da interpretare valori e semplicemente li ignora.

    scala> "1,100,53,5000,will-not-fail,23,3,3,4,5,5".split(",").flatMap(maybeInt => 
        scala.util.Try(maybeInt.toInt).toOption).distinct
    res2: Array[Int] = Array(1, 100, 53, 5000, 23, 3, 4, 5)

    OriginaleL’autore kompot

  3. 2

    aggiunto un controllo di tipo stringa di essere facile da interpretare come Int :

    package load.data
    
    object SplitArray {
    
      def splitArrayintoString(s: String): Set[Int] =
        {
          val strArray = s.split(",")
          strArray filter isParseAbleAsInt map (_.toInt) toSet
        }
    
      private def isParseAbleAsInt(str: String): Boolean =
        str.forall(Character.isDigit(_))
    
    }

    OriginaleL’autore Stefan Kunze

  4. 0

    Di partenza Scala 2.13, se si prevede di elementi che non possono essere espressi, si potrebbe desiderare di utilizzare String::toIntOption in modo sicuro cast queste split Strings a Option[Int]s e li elimina con un flatMap:

    "1,100,53s,5000,4,5,5".split(',').flatMap(_.toIntOption).distinct
    //Array[Int] = Array(1, 100, 5000, 4, 5)

    OriginaleL’autore Xavier Guihot

Lascia un commento