【问题标题】:searching classes in an array在数组中搜索类
【发布时间】:2010-01-02 21:14:52
【问题描述】:

我有一个数组 (Items),其中包含一个类 (Item) 的许多实例。

Item 有 2 个属性,一个组和一个 ID。

数组中可能有多个Item (Items) 具有相同的 Group 和 ID 属性。

如何“搜索”/获取与指定组和/或 ID 匹配的第一个 Item

类似: Item.getbygroup([group]) 返回一个 item

编辑:什么能让我找到第二个?所以开始在数组中搜索一个点

【问题讨论】:

    标签: .net vb.net arrays search


    【解决方案1】:

    使用 LINQ:

    其中 group 和 id 是一些要比较的变量

    var item = Items.Where(x => x.Group == group || x.ID == id).First();
    

    【讨论】:

    • 合法是什么意思? (事实上​​它不是 VB)
    • 当然可以,语法只需要转换为VB,即类似(未经测试):Dim item = Items.Where(Function(x) x.Group = group OrElse x.ID = id).First()
    • @Jonathan:我的意思是它不是合法的 VB.NET 语法。
    • @Heinzi:如果需要转换,那么您的断言(“[s]ure it is”)是错误的。
    • 好的,我不明白你所说的整个法律问题是什么意思。 Heinzi 评论中的代码是否正确/可用/正确/“合法”
    【解决方案2】:

    使用Array.Find。来自文档:

    搜索与指定谓词定义的条件匹配的元素,并返回整个 Array 中的第一个匹配项。

    例子:

    通过Item.Group搜索:

    Item firstItem = Array.Find(Items, Function(item as Item) item.Group = group);
    

    通过Item.ID搜索:

    Item firstItem = Array.Find(Items, Function(item as Item) item.ID = ID);
    

    回应您的编辑:

    编辑:什么能让我找到第二个?所以开始在数组中搜索一个点

    你可以这样做:

    Dim matches as Item()
    Dim secondItem as Item
    matches = Array.FindAll(Items, Function(item as Item) item.Group = group)
    If matches.Length >= 2 Then
        secondItem = matches(1)
    Else
        'handle case where no second item
    EndIf
    

    【讨论】:

      猜你喜欢
      • 2011-10-20
      • 1970-01-01
      • 2015-07-12
      • 2014-04-26
      • 1970-01-01
      • 2013-04-15
      • 2020-02-01
      • 2019-09-20
      相关资源
      最近更新 更多