如何检查列表的任何元素是否以给定范围内的任何字符开头?

时间:2018-01-15 02:19:14

标签: scala

我有一个名单和给定的字符范围A..F 我试过这个:

val r = x.filter(_.name.startsWith('A' to 'F'))

但它不起作用,有什么建议吗?

3 个答案:

答案 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