我似乎找不到一个现成的答案,或者即使这个问题以前曾经被问过,但我希望有类似于SQL STRING_SPLIT函数的功能,其中逗号分隔列表中的每个项目都由其在字符串中的序号标识。
给定字符串“abc,xyz,def,tuv”,我想得到一个元组列表,如下所示:
<1, "abc">
<2, "xyz">
<3, "def">
<4, "tuv">
顺序是很重要的,我需要保持顺序,并且能够使用linq将它与另一个列表进一步连接,并且能够保持顺序。例如,如果第二个列表是〈“tuv”,“abc”〉,我希望连接的最终输出是:
<1, "abc">
<4, "tuv">
基本上,我希望用逗号分隔的字符串来确定最终结果的顺序,其中逗号分隔的字符串包含所有可能的字符串,它与一个字符串子集的无序列表连接,输出是一个有序元组列表,该列表只包含第二个列表中的元素,但顺序由开头的逗号分隔的字符串确定。
如果我能得到一个C#中的各种SQL STRING_SPLIT函数的等价物,我就可以自己解决所有这些问题,这些函数不仅进行拆分,而且在输出中还包括有序元素编号。但是我搜索了一下,除了将字符串拆分为单个元素,或者将它们拆分为元组(元组的两个元素都在字符串中)之外,我没有找到C#中的任何内容。而不是生成的整数以保持顺序。
这里,顺序对我来说很重要。所以,如果元素编号不容易实现,那么,一种内部连接两个列表并保证保留第一个列表的顺序,同时只返回第二个列表中的元素的方法将是受欢迎的。对我来说,棘手的部分是最后一部分:连接的结果需要一个特定的(不容易排序的)顺序。序数可以给我排序的依据,但是如果我可以保证输出与第一个输入的顺序相同,那也可以。
5条答案
按热度按时间rqqzpn5f1#
这应该可以在.NET框架上工作。
原始回应如下
如果你想坚持使用SQL,这里是如何使用linq操作符的,Select方法有一个内置的索引参数,你可以使用它,你可以使用IntersectBy来执行一个简单的内部连接。
y0u0uwnf2#
这将得到元组列表
如果你想添加
"tuv"
和"abc"
的列表并保留1,你可能想“左连接”。2但是我不确定你如何使用LINQ,因为你首先需要迭代元组的原始列表并分配相同的int
。3然后连接。4或者,你可以先连接,然后分配int
,但是技术上,顺序是不保证的。5但是,如果先赋值int
,最后可以按它排序。我对 “有点困惑,我可以使用linq” 将列表与另一个列表进一步连接。连接通常意味着聚合结果。但在您的情况下,似乎您需要的是细分,而不是连接的数据。
这将为您提供所需的内容-将
L2
中的项目与L1
中的顺序相匹配gijlo24d3#
虽然不能100%确定您的目标,但可以尝试:
这将产生:
oxosxuxt4#
使用LINQ
现在您可以根据需要使用
output
列表。deyfvvtc5#
给定示例
例如,如果第二个列表是〈“tuv”,“abc”〉,我希望连接的最终输出是:
〈1,“abc”〉〈4,“tuv”〉
我想这可能是关闭?
这将产生一个交集结果,该结果具有列表1中的元素,这些元素也在列表2中,在本例中,交集结果为:
如果您需要两个列表中的 all 元素,请将
Intersect
切换为Union
。