String 带有多个逗号的字符串的scala筛选列表
我对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)])。我一直在尝试各种方法,但一直失败,现在我不知道如何开始。您说要筛选“字符串列表”。因此我认为您的输入可能
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))