Link to home
Start Free TrialLog in
Avatar of jagguy
jagguyFlag for Australia

asked on

for each where

Is there a way in vb.net select all elements from a for each statement using a where?
I am not a fan of linq for speed purposes.
It is for a game type program so speed is critical.


I want to iterate through only some  elements of a list . Those elements meet some condition.
Like  iterate through a list of objects where some property is set to false.

I can use a for each and and if statement currently but I am after a better way.


  For Each pt In Mpl
            If pt.direction = missileType Then
...
Avatar of Wayne Taylor (webtubbs)
Wayne Taylor (webtubbs)
Flag of Australia image

The only way to do that is with LINQ.    Dim pts = From pt In Mpl Where pt.Direction = missleType    For Each pt In pts        ''''    NextWayne
You can use the List.FindAll() method:
http://msdn.microsoft.com/en-us/library/fh1w7y8z.aspx

Really not sure if it is "better" though...just different...

Made up example:
Public Class Form1

    Private Const missileType As Integer = 0

    Private Class Something
        Public direction As Integer
    End Class

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Mpl As New List(Of Something)

        ' ...

        For Each pt In Mpl.FindAll(AddressOf FindMissiles)
            ' ...
        Next
    End Sub

    Private Function FindMissiles(ByVal pt As Something) As Boolean
        Return pt.direction = missileType
        ' ... obviously a more complicted match algorithm could be used in here! ...
    End Function

End Class

Open in new window

what about creating a dynamic datatable, put elements into it (maybe you already getting values from db, in this case you may have a datatable already)
then you can use rowfilter property of datatable.defaultview.rowfilter="id > 10 and id < 20"

--> http://msdn.microsoft.com/en-us/library/system.data.dataview.rowfilter.aspx
Avatar of jagguy

ASKER

thanks for the replies.

actually it looks worse with all these  extra functions and I am wooried about speed as well, database no way and MSDN examples dont always clarify things. Who wites MSDN stuff and does it get proof read for simplicity?
I'm a C# guy, pardon my syntax.

For Each pt In Mpl.Where pt => pt.direction = missileType


this will only iterate elements matching your where condition. I don't know why you feel LINQ will slow down your processing when it's actually design gain performance.
Avatar of jagguy

ASKER

i havent read anywhere Liunq speeds up performance and have only heard it slows things down because of its design.

Could you show me any article where it says iterating through a list of data using linq is quicker ( or no slwere)than using an if condition .
ASKER CERTIFIED SOLUTION
Avatar of Gururaj Badam
Gururaj Badam
Flag of India image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial