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



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

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

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

如果第一个字符测试始终是一个范围,而不是离散字符的集合,则可以筛选 ASCII 值。

val r = x.filter(y => y.name.head >= 'A' && y.name.head <= 'F')

"存在列表 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

您可以使用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)

相关内容

最新更新