我有一个名单和给定的字符范围A..F 我试过这个:
val r = x.filter(_.name.startsWith('A' to 'F'))
但它不起作用,有什么建议吗?
答案 0 :(得分:1)
如果第一个字符测试始终是一个范围,而不是一系列谨慎字符,则可以过滤ASCII值。
val r = x.filter(y => y.name.head >= 'A' && y.name.head <= 'F')
答案 1 :(得分:0)
您可以使用listOfExpectedChars.contains(firstLetter)
。
scala> val names = Seq("Architects", "Metallica", "Pink floyd", "Foo Fighters")
names: Seq[String] = List(Architects, Metallica, Pink floyd, Foo Fighters)
scala> names.filter(name => ('A' to 'F').contains(name(0)))
res1: Seq[String] = List(Architects, Foo Fighters)
name(0)
相当于name.head
。
scala> names.filter(name => ('A' to 'F').contains(name.head))
res2: Seq[String] = List(Architects, Foo Fighters)
请注意.head
空数组错误java.util.NoSuchElementException
。更安全的方法是使用.headOption
scala> val names = Seq("Architects", "Metallica", "Pink floyd", "Foo Fighters", "")
names: Seq[String] = List(Architects, Metallica, Pink floyd, Foo Fighters, "")
scala> names.filter(name => ('A' to 'F').map(Option(_)).contains(name.headOption))
res3: Seq[String] = List(Architects, Foo Fighters)
答案 2 :(得分:0)
“列表1中存在一个名称,因此列表2中存在一个字母,名称的头部是字母”:
list1.exists(name => list2.exists(letter => name.headOption == Some(letter)))
示例:
scala> List("Alice", "Bob").exists(name => ('A' to 'F').exists(letter => name.headOption == Some(letter)))
res1: Boolean = true
scala> List("Alice", "Bob").exists(name => ('X' to 'Z').exists(letter => name.headOption == Some(letter)))
res2: Boolean = false