ToLookup,LINQ和Index

时间:2011-01-19 09:43:04

标签: .net vb.net collections

我有以下情况(VB.NET,.NET 4):

自定义对象的通用列表letters(Of Letter)

A, B, C, B, D

需要一个包含项目及其索引的集合:

A (0)
B (1, 3)
C (2)
D (4)

有些尝试:

Dim letters As New List(Of Letter)
Dim query As ??? = letters.Select(Function(letter, index) _
                            New With {index, letter})

Dim lookup As Lookup(Of Letter, Integer)
lookup = letters (query).ToLookup(???

2 个答案:

答案 0 :(得分:1)

首先使用支持索引的Select重载来创建字母和索引的元组(或KeyValuePair)。然后使用ToLookUp的重载,它接受键和值的选择器。

您可能需要提供IEqualityComparer<Letter>ToLookUp,或覆盖 Letter.EqualsLetter.GetHashCode()。这两个需要被重写,因此它们是一致的,否则你会得到错误的结果。

答案 1 :(得分:0)

Dim lookup = Enumerable.Range(0, letters.Count).ToLookup(Function(i) letters(i))