取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
The Discovery Summit 2025 Call for Content is open! Submit an abstract today to present at our premier analytics conference.
选择语言 隐藏翻译栏
查看原发布的话题

如何检查一个列表是否包含来自另一个列表的任何值?

miguello
Level VI

是否有一个优雅的单行代码来实现这一点,而不是使用 Contains() 函数遍历第二个列表?

这篇帖子最初是用 English (US) 书写的,已做计算机翻译处理。当您回复时,文字也会被翻译成 English (US)。

1 个已接受解答

已接受的解答
txnelson
Super User

回复:如何检查一个列表是否包含来自另一个列表的任何值?

您可以循环遍历其中一个列表并使用 Contains() 来查看是否在另一个列表的任何地方找到特定的列表项。

或者,您可以将两个列表转换为单独的关联数组,然后检查两个数组之间的相交。


Names Default To Here( 1 );

listA = {"a", "b", "c"};

listB = {"d", "c", "f"};

inBothList = {};

For Each( {member}, listA,
	If( Contains( listB, member ),
		Insert Into( inBothList, member )
	)
);

Show( inBothList );

arrayA = Associative Array( listA );
arrayB = Associative Array( listB );

arrayA << intersect( ArrayB);

show( arrayA );
3 条回复3
miguello
Level VI

回复:如何检查一个列表是否包含来自另一个列表的任何值?

虽然不是一行,但比循环更优雅:

A = {1, 2, 3, 4, 5};
B = {3, 6, 7};
check = Associative Array(A);
check << Intersect(Associative Array(B));
N Items(check);

这篇帖子最初是用 English (US) 书写的,已做计算机翻译处理。当您回复时,文字也会被翻译成 English (US)。

txnelson
Super User

回复:如何检查一个列表是否包含来自另一个列表的任何值?

您可以循环遍历其中一个列表并使用 Contains() 来查看是否在另一个列表的任何地方找到特定的列表项。

或者,您可以将两个列表转换为单独的关联数组,然后检查两个数组之间的相交。


Names Default To Here( 1 );

listA = {"a", "b", "c"};

listB = {"d", "c", "f"};

inBothList = {};

For Each( {member}, listA,
	If( Contains( listB, member ),
		Insert Into( inBothList, member )
	)
);

Show( inBothList );

arrayA = Associative Array( listA );
arrayB = Associative Array( listB );

arrayA << intersect( ArrayB);

show( arrayA );

这篇帖子最初是用 English (US) 书写的,已做计算机翻译处理。当您回复时,文字也会被翻译成 English (US)。

jthi
Super User

回复:如何检查一个列表是否包含来自另一个列表的任何值?

我通常使用 For Each + Break 或 Associative Arrays,但是有很多不同的方法,你可以使用一些“不正确”的函数,例如 Transform Each (在我看来,“单行”通常是糟糕的想法,因为它们往往难以阅读)


Names Default To Here( 1 );

A = {1, 2, 3, 4, 5};
B = {3, 6, 7};

r = Eval(Transform Each({item}, A, Output("Expression", "Any"), Contains(B, item)));

这还取决于您要比较的内容:字符串、整数、浮点数、列表......因为 JMP 列表基本上可以包含任何内容。


这篇帖子最初是用 English (US) 书写的,已做计算机翻译处理。当您回复时,文字也会被翻译成 English (US)。