String 带有多个逗号的字符串的scala筛选列表

String 带有多个逗号的字符串的scala筛选列表,string,scala,list,split,String,Scala,List,Split,我对Scala非常陌生,我甚至不知道如何恰当地描述我的问题,但我会尽我所能用例子来解释。 我想筛选一个带有条件的字符串列表,但该列表包含大量逗号。该列表包含userID、artID和评级。(例如) 以3123,5为例,3是userID,123是artID,5是评级。 我想做的是获取高于4的评分,并返回一个列表(仅(userID,artID)(返回为list[(String,String)])。我一直在尝试各种方法,但一直失败,现在我不知道如何开始。您说要筛选“字符串列表”。因此我认为您的输入可能

我对Scala非常陌生,我甚至不知道如何恰当地描述我的问题,但我会尽我所能用例子来解释。 我想筛选一个带有条件的字符串列表,但该列表包含大量逗号。该列表包含
userID
artID
和评级。(例如)

3123,5
为例,
3
userID
123
artID
5
是评级。
我想做的是获取高于4的评分,并返回一个列表(仅(
userID
artID
)(返回为
list[(String,String)]
)。我一直在尝试各种方法,但一直失败,现在我不知道如何开始。

您说要筛选“字符串列表”。因此我认为您的输入可能如下所示

val lst = List("1,1,4", "1,1060,2", "3,123,5", "4,1210,5", "4,1213,4")

val res = lst
  .map(_.split(","))
  .collect {
    case Array(a,b,c) if c.toInt>4 => (a,b)
  }

println(res)
val lst = List("1,1,4", "1,1060,2", "3,123,5", "4,1210,5", "4,1213,4")
在这种情况下,存在对
字符串
元素进行数字比较的问题

"4"  < "5"  //true
"14" > "5"  //false
看看这个:

scala> val lst = List("1,1,4", "1,1060,2", "3,123,5", "4,1210,5", "4,1213,4")
lst: List[String] = List(1,1,4, 1,1060,2, 3,123,5, 4,1210,5, 4,1213,4)

scala> lst.filter(x=> { val y=x.split(",").map(_.toInt); y(2)>4}).map(x=>{val y = x.split(","); (y(0),y(1))} )
res16: List[(String, String)] = List((3,123), (4,1210))

scala>

您可以通过多种方式实现这一点:

val lst = List("1,1,4", "1,1060,2", "3,123,5", "4,1210,5", "4,1213,4")

  val ans: List[(String, String)] = lst.filter(elem => elem.split(",")(2).toInt > 4).map { e =>
    val s = e.split(",")
    (s(0), s(1))
  }

  val ans2: List[(String, String)] = lst.map {
    _.split(",")
  } collect {
    case Array(a, b, c) if c.toInt > 4 => (a, b)
  }

  val ans3: List[(String, String)] = lst.foldLeft(List[(String, String)]()) {
    (a, b) => {
      val sp = b.split(",")
      if (sp(2).toInt > 4) {
        (sp(0), sp(1)) :: a
      } else a
    }
  }

  println(ans) //List((3,123), (4,1210))
  println(ans2) //List((3,123), (4,1210))
  println(ans3) //List((4,1210), (3,123))             

如果c>4=>(a,b)^:22:error:type失配,我在案例列表(a,b,c)中得到一个错误;是否有任何方法将其作为列表[(字符串,字符串)]返回?您是否有
val lst=List(1,1,4,11060,2,3123,5,41210,5,41213,4)
val lst=List(“1,1,4”,“11060,2”,“3123,5”,“41210,5”,“41213,4”)作为输入?我的意思是
lst
var只包含值数组或字符串列表,如“3123,5”?很抱歉,我把你搞糊涂了,是后一个,val lst=list(“1,1,4”,“11060,2”,“3123,5”,“41210,5”,“41213,4”)添加到answer中,效果非常好。非常感谢你!我还有一个问题,不能用分组(3)代替滑动吗?
scala> val lst = List("1,1,4", "1,1060,2", "3,123,5", "4,1210,5", "4,1213,4")
lst: List[String] = List(1,1,4, 1,1060,2, 3,123,5, 4,1210,5, 4,1213,4)

scala> lst.filter(x=> { val y=x.split(",").map(_.toInt); y(2)>4}).map(x=>{val y = x.split(","); (y(0),y(1))} )
res16: List[(String, String)] = List((3,123), (4,1210))

scala>
val lst = List("1,1,4", "1,1060,2", "3,123,5", "4,1210,5", "4,1213,4")

  val ans: List[(String, String)] = lst.filter(elem => elem.split(",")(2).toInt > 4).map { e =>
    val s = e.split(",")
    (s(0), s(1))
  }

  val ans2: List[(String, String)] = lst.map {
    _.split(",")
  } collect {
    case Array(a, b, c) if c.toInt > 4 => (a, b)
  }

  val ans3: List[(String, String)] = lst.foldLeft(List[(String, String)]()) {
    (a, b) => {
      val sp = b.split(",")
      if (sp(2).toInt > 4) {
        (sp(0), sp(1)) :: a
      } else a
    }
  }

  println(ans) //List((3,123), (4,1210))
  println(ans2) //List((3,123), (4,1210))
  println(ans3) //List((4,1210), (3,123))