代码之家  ›  专栏  ›  技术社区  ›  j2emanue

Kotlin分区命令未按预期工作

  •  0
  • j2emanue  · 技术社区  · 6 年前

    我正在使用kotlin插件的“1.2.60”版本。从文档中可以看出,分区应该基于某个谓词拆分一个集合。但是当我尝试它的时候,它并没有分裂成正确和错误的结果对。让我告诉你发生了什么,我试过什么:

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

    在这里我期待着我能找回一对科特林。第一个是“abcd”,第二个是“ef” 我要做的是,如果任何字符不在一个字符串中,那么它应该是分开的。因此,既然“ef”不在“abcd”中,就应该对其进行分区。

    我想说清楚 found = "abcd" , notFound = "ef"

    found="abcd" ,notFound=""

    为什么找不到空的,我做错什么了?你们能试试让我知道吗?

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

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

    3 回复  |  直到 6 年前
        1
  •  1
  •   user8959091 user8959091    6 年前

    分区应用于 "abcd" . 所以这个字符串被分成一对。
    "abcdef".contains(it)
    所以结果是 found 整个分区字符串 notFound
    对于托德和莱昂纳德克雷默提出的解决方案,我不确定这是否是你所需要的。

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

    返回:

    found = abcda
    notFound = ef
    

    这是你想要的吗?

        2
  •  1
  •   leonardkraemer    6 年前

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

    你会得到预期的结果。

        3
  •  1
  •   Todd    6 年前

    我想你只是有你的弦向后。

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