首页 > 解决方案 > 如何在 VB.net 中使用 ListB 按 ListB 项的顺序对 CollectionA 进行排序

问题描述

我将 Dim 人作为 List(of Persons) 字段,例如 Name , City 有一个 City Dim City 作为 New List(Of String)(New String() {"kolkata", "Delhi", "Chennai"}) 的列表

现在我想订购 Order of City 中的人员列表。即简单地说,如果一个 City 是 Person 的 kolkata 。因此,人员名单应显示加尔各答的第一名,德里第二名和钦奈。

我如何在 vb.net 中实现这一点

例如。Dim abc = from m in people join n in City on m.City 等于 n order by n (index) select m

标签: vb.netlinq

解决方案


这具有相当可怕的效率:

persons.OrderBy(Function(p) city.IndexOf(p.City) )

如果你有很多人和/或城市,最好先把城市列表变成字典:

Dim cityD = city _
  .Select(Function(s, i) New With { Key .city = s, .index = i }) _
  .ToDictionary(Function(x) x.city, Function(x) x.index)
persons.OrderBy(Function(p) cityD(p.City) )

我认为这是语法..不能轻易检查..当我在电脑上时会更新

它基本上构建了一个以城市名称为键、列表索引为值的字典。以这种方式查找要快得多。您的城市列表必须没有重复的城市名称!重复是区分大小写的,所以 "Kolkata" <> "kolkata"


推荐阅读