Power Query M 中字符串的二元组

问题描述 投票:0回答:1

我正在尝试编写一个自定义强力查询函数,将给定的字符串转换为其二元组列表。

例如,应该输出“Hi World”

列表
1
2 iW
3
4
5 rl
6 ld

我在 M here 中偶然发现了一个递归函数的实现,这让我写下了这个:

( String1 as text ) =>
let
    S1 = Text.Remove(String1, " "),
    String1_Tokens = Text.ToList(S1),
    N = List.Count(String1_Tokens),
    func = (x as list, n as number, y as list) =>
        let 
            Calc = Text.Combine({x(n), x(n+1)}),
            Lister = List.Combine({y,{Calc}}),
            Check = if n = N-1 then Lister else @func(x, n+1, Lister)
        in Check,
    res = func(String1_Tokens, 1, {})
in res

基本思想是清除字符串中的空格并将其分解为其组成符号的列表。然后将该列表传递给一个函数,该函数采用列表中的第 nth 和 n+1th 符号并将它们连接起来,然后将它们附加到已有的二元组列表中。重复此操作,直到符号列表用完为止。

当尝试使用输入字符串调用此函数时,出现以下错误:

“”查询发生错误。 Expression.Error:我们无法将 List 类型的值转换为 Function 类型。 细节: 值=[列表] 类型=[类型]

我错过了什么?我对 M 还很陌生,所以我觉得我肯定错过了一些基本的东西。

powerbi powerquery m
1个回答
0
投票

你快明白了!

( String1 as text ) =>
let
    S1 = Text.Remove(String1, " "), // Remove spaces
    String1_Tokens = Text.ToList(S1), // Convert the string to a list of characters
    N = List.Count(String1_Tokens), // Get the length of the list
    func = (x as list, n as number, y as list) =>
        let 
            // Combine the current and next characters
            Calc = Text.Combine({x{n}, x{n+1}}),
            // Append the result to the list
            Lister = List.Combine({y, {Calc}}),
            // Check if we are at the second to last element, stop recursion if we are
            Check = if n = N-2 then Lister else @func(x, n+1, Lister)
        in 
            Check,
    // Start the recursion at index 0
    res = func(String1_Tokens, 0, {})
in 
    res
© www.soinside.com 2019 - 2024. All rights reserved.