如何将这些对象分组为可以相互链接的对象?

How do I group these objects into those that can be linked to each other?

提问人:Ne Mo 提问时间:10/23/2023 最后编辑:mklement0Ne Mo 更新时间:11/15/2023 访问量:93

问:

我有一个已找到的项目和匹配项列表,如下所示。

项目 比赛
苹果 树;窗
显微镜
烟囱 菜;栅栏
栅栏
耳机
显微镜 箱;耳机
烟囱;苹果

我想把它们分成几组,其中每个可以被另一个对象“到达”的对象都与该对象在同一组中。例如,苹果与栅栏属于同一组,因为在“匹配”列中,我们可以转到苹果->窗口->烟囱->栅栏

然而,苹果显微镜不在同一组,因为两者之间没有路径。它们不会在“匹配项”列中相互列出,并且这些项都不会在其“匹配项”列中列出其他项,依此类推。

项目 比赛
苹果 树;窗 1
显微镜 2
烟囱 菜;栅栏 1
1
栅栏 1
耳机 2
显微镜 箱;耳机 2
3
烟囱;苹果 1

^这是第三列 group 的样子。有没有办法使用 LAMBDA 函数(最好没有插件)来做到这一点?

像 TEXTJOIN 这样的东西是行不通的,因为尽管存在“路径”,但没有字符串匹配会连接“apple”和“chimney”,因为匹配不存在。

谢谢。

Excel 公式 匹配 excel-365

评论


答:

1赞 Can.U 11/15/2023 #1
=MIN(
    IFNA(
        VLOOKUP("*"&
            LET(
                Z,LAMBDA(X,UNIQUE(TEXTSPLIT(TEXTJOIN(";",,REPT(A$2:B$10,BYROW(A$2:A$10&B$2:B$10,LAMBDA(S,COUNT(FIND(X,S))>0)))),,";"))),
                Z(Z(Z(Z(A2)))))&"*",
                IF({1,0},A$1:A$1&B$1:B1,C$1:C1),2,),9),N(C1)+1)

enter image description here

Z错层,我又加了两个,以防意外,仅供参考。

2赞 Clark 11/15/2023 #2

试一试:

=XMATCH("*"&A2&"*",REDUCE(,A$1:A10,LAMBDA(m,n,IF(COUNT(FIND(n,m)),m,VSTACK(m,REDUCE(n,A2:A10,LAMBDA(x,y,TEXTJOIN(";",,x,XLOOKUP(TEXTSPLIT(x,";"),A:A,B:B,"")))))))),2)-1

enter image description here

评论

0赞 Ne Mo 11/15/2023
这可以按要求工作,谢谢。你能解释一下它是如何工作的吗?我仍在努力了解 Lambda 函数,tbh。