【问题标题】:Kotlin - Idiomatic way to check array contains valueKotlin - 检查数组是否包含值的惯用方法
【发布时间】:2017-07-03 06:02:40
【问题描述】:

在 Kotlin 中检查字符串数组是否包含值的惯用方法是什么?就像 ruby​​ 的 #include?.

我想过:

array.filter { it == "value" }.any()

有没有更好的办法?

【问题讨论】:

    标签: arrays kotlin


    【解决方案1】:

    您可以使用find 方法,该方法返回与给定[谓词] 匹配的第一个元素,如果没有找到这样的元素,则返回null。 试试这段代码,在 array 的对象中找到 value

     val findedElement = array?.find {
                it.id == value.id
     }
     if (findedElement != null) {
     //your code here           
     } 
    

    【讨论】:

    • 如何从数组中获取findElement值的位置?
    • 谢谢它对我有用
    • @AnzyShQ 您可以使用 array.indexIf(Object o) 方法找到一个位置 -> 将返回第一个元素的索引,array.lastIndexOf(Object o) -> 将返回最后一个元素的索引。您也可以使用谓词等array.indexOfLast { it.name == "test " }array.indexOfFirst { it.name == "test "}
    【解决方案2】:

    你可以使用它..contains(" ")

     data class Animal (val name:String)
    
    
     val animals = listOf(Animal("Lion"), Animal("Elephant"), Animal("Tiger"))
    
     println(animals.filter { it.name.contains("n") }.toString())
    

    输出将是

    [Animal(name=Lion), Animal(name=Elephant)]
    

    【讨论】:

      【解决方案3】:

      这是您可以在 ArrayList 中找到带有对象的特定字段的代码。 Amar Jain 的回答帮助了我:

      listOfObjects.any{ it.field == "value"}
      

      【讨论】:

        【解决方案4】:

        您还可以使用any()检查数组是否包含具有某些特定字段的对象以进行比较

        listOfObjects.any{ object -> object.fieldxyz == value_to_compare_here }
        

        【讨论】:

          【解决方案5】:

          您正在寻找的等价物是contains 运算符。

          array.contains("value") 
          

          Kotlin 为该运算符提供了替代 infix notation

          "value" in array
          

          这与在后台调用的函数相同,但由于在 Java 中找不到 infix notation,我们可以说 in 是最惯用的方法。

          【讨论】:

          • 当我在 Kotlin 中尝试此操作时,我得到“类型推断失败。类型参数 T 的值应在输入类型中提及。” private var domainArray = arrayOf("@ebay.com", "@google.com", "@gmail.com", "@umd.edu") var domainFound = Arrays.asList(domainsArray).contains(email)跨度>
          • 只写 var domainFound = domainArray.contains(email) 或更多惯用的 var domainFound = email in domainArray
          • 知道如何与忽略大小写字符串进行比较吗? array.contains("value") 不检查字符串的忽略大小写。
          • 您可以在调用 contains 之前使用 toLowerCase 字符串扩展函数映射数组。
          【解决方案6】:

          使用 in 运算符是一种惯用的方式。

          val contains = "a" in arrayOf("a", "b", "c")
          

          【讨论】:

            【解决方案7】:

            您可以使用in operator,在这种情况下,它调用contains

            "value" in array

            【讨论】:

              猜你喜欢
              • 2019-08-10
              • 2015-01-01
              • 2021-07-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-02-04
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多