【问题标题】:Kotlin partition command not working as expectedKotlin 分区命令未按预期工作
【发布时间】:2018-08-22 18:03:16
【问题描述】:

我正在使用 '1.2.60' 版本的 kotlin 插件。从文档中它说分区应该根据某些谓词拆分集合。但是,当我尝试它时,它并没有分成真假结果对。让我告诉你发生了什么以及我尝试了什么:

val(found,notFound) = "abcd".partition { "abcdef".contains(it)}

在这里,我期待我会得到一个 Kotlin Pair。第一个是“abcd”,我希望第二个是“ef” 我想要做的是,如果任何字符不在一个字符串中,那么它应该分开。因此,既然“ef”不在“abcd”中,就应该对其进行分区。

要清楚,我期待found = "abcd" , notFound = "ef"

但是当我运行此代码时,我得到以下信息:found="abcd" ,notFound=""

为什么找不到空,我做错了什么?你们可以试试并告诉我吗?

如果我们检查the docs,它说这个分区命令应该被谓词分割:

将原始字符串拆分为一对字符串,其中第一个字符串包含谓词为真的字符,而第二个字符串包含谓词为假的字符。

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    分区应用于"abcd"。所以这个字符串被分成一对。
    "abcdef".contains(it) 是一个始终返回 true 的谓词。
    所以结果是found 整个分区字符串和notFound 什么都没有。
    对于提出 Todd 和 leonardkraemer 的解决方案,我不确定这是否是您所需要的。
    例如:

    val(found, notFound) = "abcdefa".partition { "abcd".contains(it) }
    

    返回:

    found = abcda
    notFound = ef
    

    这是你所期望的吗?

    【讨论】:

      【解决方案2】:

      你交换了论点。试试

      val(found,notFound) = "abcdef".partition { "abcd".contains(it)}
      

      你会得到预期的结果。

      【讨论】:

        【解决方案3】:

        我认为你只是把你的弦放倒了。

        我能够得到你想要的结果:

        val (found, notFound) = "abcdef".partition { "abcd".contains(it) }
        

        【讨论】:

          猜你喜欢
          • 2015-06-24
          • 1970-01-01
          • 2018-09-16
          • 2021-11-25
          • 2020-05-23
          • 2016-09-29
          • 2019-10-31
          • 1970-01-01
          相关资源
          最近更新 更多