gpt4 book ai didi

拆分重叠 [RAKU]

转载 作者:行者123 更新时间:2023-12-03 18:14:00 25 4
gpt4 key购买 nike

当我尝试解析多行字符串(使用制表符分隔的字符串)以查找由制表符分隔的所有值时,我偶然发现了一个“奇怪”的行为,使用连续的两个拆分:

use v6.d;   # 2020.01 release

my $s = "L1:C1\tL1:C2\tL1:C3\nL2:C1\tL2:C2\tL2:C3\nL3:C1\tL3:C2\tL3:C3";

say $s.split(/\n/).split(/\t/).raku;

对应的打印输出如下:
("L1:C1", "L1:C2", "L1:C3 L2:C1", "L2:C2", "L2:C3 L3:C1", "L3:C2", "L3:C3").Seq

“奇怪”的行为出现在结果序列的第 3 和第 5 个成员中。似乎一行的“预期”最后一个字符串和后续行的第一个字符串有重叠。

我的期望是这样的:
("L1:C1", "L1:C2", "L1:C3", "L2:C1", "L2:C2", "L2:C3", "L3:C1", "L3:C2", "L3:C3").Seq

任何人都可以详细解释这种行为的内部运作?

为了澄清事情,我知道正确的代码是:
$s.split(/\n/)>>.split(/\t/).flat.raku

但我的问题是关于“错误”代码的内部工作原理。 Raku 是如何得出这个结果的?

最佳答案

您正在拆分第一次拆分的结果,这是一个列表; split 方法会将其调用的任何内容强制转换为字符串,然后将其拆分。列表将字符串化(通过其 Str 方法)为其成员以单个空格分隔。这就是为什么某些结果字段有两个 L 和 C 对并且中间有一个空格的原因。

这会让你得到你想要的结果:

say "L1:C1\tL1:C2\tL1:C3\nL2:C1\tL2:C2\tL2:C3\nL3:C1\tL3:C2\tL3:C3"
.split("\n")
.map( *.split( "\t" ).Slip )

由于它把第一个 split 的结果 split ,然后把它转换成 Slip让它滑入更广泛的阵列。

关于拆分重叠 [RAKU],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60204278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com