vb.NET
我有两个列表(listA和listB),并且想要返回一个新列表(listC),其中包含与listA相比,listB的匹配元素的索引。
因此,假设:listA = 3,4,5,listB = 1,2,3,4,5,6,7。我希望listC返回2,3,4,因为这些是listB中匹配项的索引。
以下代码将返回listC中listA和listB的匹配值。
Dim commonlist = listA.Intersect(listB).ToList()
For each common As String In commonlist
listC.Add(common)
Console.WriteLine(common)
Next common
我该如何将索引返回给listC或新的listD?
Dim listC = listA.Select(Function(itemA) listB.IndexOf(itemA)).ToList()
如果您不熟悉LINQ,则该Select
方法具有将列表中的项目映射到新列表的功能。映射功能的作用完全取决于您。通常从项目中获取单个属性值,但是,在您的情况下,它正在获取其他列表中的项目索引。
Select
返回一个IEnumerable(Of T)
,如果您打算做的就是For Each
在其上运行一个循环,这就是您所需要的,但是您可以调用ToList
创建一个List(Of T)
if。
编辑:
我认为我可能对这个问题有轻微的误解。我将保留原始答案,因为我所做的基本上listD
是问题中要求的内容,但我将添加有关获取项目和索引的信息。
这是一个选择:
Dim listA As New List(Of Integer) From {1, 2, 3, 9}
Dim listB As New List(Of Integer) From {1, 2, 3, 4, 5, 6}
Dim listC = listA.Select(Function(a) Tuple.Create(a, listB.IndexOf(a))).
Where(Function(ta) ta.Item2 <> -1).
ToList()
For Each ta In listC
Console.WriteLine("Value: {0}; Index: {1}", ta.Item1, ta.Item2)
Next
该代码将创建一个列表,Tuples
其中每个列表包含一个来自的值listA
以及该值在中的索引listB
。不在两个列表中的那些值均被排除。
如果您想要比a更好的东西,Tuple
则可以创建一个Dictionary
:
Dim listA As New List(Of Integer) From {1, 2, 3, 9}
Dim listB As New List(Of Integer) From {1, 2, 3, 4, 5, 6}
Dim dictionaryC = listA.Select(Function(a) Tuple.Create(a, listB.IndexOf(a))).
Where(Function(ta) ta.Item2 <> -1).
ToDictionary(Function(ta) ta.Item1,
Function(ta) ta.Item2)
For Each key In dictionaryC.Keys
Console.WriteLine("Value: {0}; Index: {1}", key, dictionaryC(key))
Next
如果您特别想要两个单独的列表,则可以执行以下操作:
Dim listA As New List(Of Integer) From {1, 2, 3, 9}
Dim listB As New List(Of Integer) From {1, 2, 3, 4, 5, 6}
Dim listC = listA.Intersect(listB).ToList()
Dim listD = listC.Select(Function(c) listB.IndexOf(c)).ToList()
For i = 0 To listC.Count - 1
Console.WriteLine("Value: {0}; Index: {1}", listC(i), listD(i))
Next
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句