Kotlin:"如果项目不在列表中"正确的语法

Ada*_*hes 27 kotlin

鉴于Kotlin的列表查找语法,

if (x in myList)
Run Code Online (Sandbox Code Playgroud)

而不是惯用的Java,

if (myList.contains(x))
Run Code Online (Sandbox Code Playgroud)

怎么能表达否定?编译器不喜欢以下任何一个:

if (x not in mylist)

if !(x in mylist)
Run Code Online (Sandbox Code Playgroud)

是否有一种惯用的表达方式除此之外if !(mylist.contains(x)))?我没有在Kotlin Control Flow文档中看到它.

Yoa*_*erg 46

使用x !in list语法.

以下代码:

val arr = intArrayOf(1,2,3)
if (2 !in arr)
   println("in list")
Run Code Online (Sandbox Code Playgroud)

编译为相当于:

int[] arr = new int[]{1, 2, 3};
// uses xor since JVM treats booleans as int
if(ArraysKt.contains(arr, 2) ^ true) { 
   System.out.println("in list");
}
Run Code Online (Sandbox Code Playgroud)

in!in运营商使用名为任何的使用方法或扩展方法,contains并返回Boolean.对于集合(list,set ...),它使用collection.contains方法.对于数组(包括原始数组),它使用Array.contains实现为的扩展方法indexOf(element) >= 0

  • @AdamHughes 另外,“is”检查也是一样的:它的否定是“!is”。 (3认同)

zsm*_*b13 15

Kotlin的操作员是!in.所以你可以做到

if (x !in myList) { ... }
Run Code Online (Sandbox Code Playgroud)

您可以在有关运算符重载的官方文档中找到它.