【问题标题】:how to Order a CollectionA using ListB ordering it in order of ListB Items in VB.net如何在 VB.net 中使用 List 按 List Items 的顺序对 CollectionA 进行排序
【发布时间】:2020-05-10 05:22:14
【问题描述】:

我有 将人员作为 List(of Persons) 的人员,其中包含 Name 、 City 等字段 有一个城市列表 Dim City As New List(Of String)(New String() {"kolkata", "Delhi", "Chennai"})

现在我想在 Order of City 中对人员列表进行排序。 即如果一个 City 是 Person 的 kolkata。 因此,人员名单应显示加尔各答第一名,德里第二名,钦奈。

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

例如。 Dim abc = 来自 m 人 加入城市 在 m.City 上等于 n 按 n (索引)排序 选择m

【问题讨论】:

    标签: vb.net linq


    【解决方案1】:

    这具有相当可怕的效率:

    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"

    【讨论】:

    • _ 是多余的 ;)
    • @Fabio 是的,我认为(至少对于 LINQ 的东西),但是.net fiddle complained 当我忽略它时(选择.net 472)所以我把它放进去.. 留下你的评论其他人的指针,他们也许可以把它拿出来! :)
    • 谢谢 caius 。这很有帮助并解决了我的问题。
    • @user3472553 请单击答案左侧的复选标记(勾号)接受答案,以便其他用户得到帮助。它还将为您赢得几次代表。
    • @user3472553 如果答案有用,请单击数字上方的向上箭头?。如果答案是您选择使用的答案,请单击灰色 ☑️ 将其变为绿色 ✅。有时你会得到多个答案;可以对任意数量的答案进行投票?,只有一个可以被接受为您选择的答案。已接受答案的问题在仪表板上以不同方式显示,以便人们知道他们已得到回答
    猜你喜欢
    • 2010-12-22
    • 2018-10-28
    • 1970-01-01
    • 2017-09-07
    • 2017-11-02
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多