Announcement

Collapse
No announcement yet.

Array to Linq

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Array to Linq

    Hallo,

    ich arbeite (noch immer) gerne mit einfachen (auch mehrdimensionelle) Arrays.

    Leider erlaubt Linq da nicht allzuviel um Ergebnisse zu erhalten

    Beispiel:

    Code:
    Dim myArr(10,2) as integer
    
    myArr(1,0) = 20
    myArr(1,1) = 1
    ' und so weiter ...

    was muss ich bei einer Linq-Abfrage "eingeben" um auf die entsprechende Dimension des Arrays zuzugreifen - zu können

    Code:
    Dim myQuery = from XA in myARR select ErsteDim = xa.Dimension(1) ' ???
    ich möchte hier nicht auf "vorher" mit DirectCast oder so ne Lösung zu kommen ... mir gehts grundsätzlich darum,
    ob man die entsprechende Dimension irgendwie "angeben" kann um dann
    Linq- auch zur anzeige z.B.
    Code:
    DatagridViewX.Datasource = myQuery.ToList
    zu beschwichtigen :-)

    Danke
    Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
    Um heute vorm PC zu sitzen!

  • #2
    Hallo,

    mehrdimensionale Arrays habe ich nie verwendet da diese in keinster Weise irgendeinen Vortiel haben. Wenn schon dann jagged Arrays denn diese kann der JITer auch optimieren. Das spielt aber bei mir auch nur für numerische Angelegenheiten eine Rolle. Überall sonst sind die System.Collection.Generics vorteilhafter.

    LINQ kann mit allem arbeiten was IEnumerable<T> implementiert. Ist das hier der Fall?

    Gibts es sonst für das mehrdimensionale Array eine Methode ala GetDimension?

    Wie aber bereits oben erwähnt rate ich dir von diesem Vorgehen ab.


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      ja ... für rein numerische durchläufe ... sind die halt am schnellsten ... oft bis mehrfachem faktor x
      ...
      klar könnte man nen zähler in die linq einbinden und so auf die entsprechende position im array zugreifen ... darum gings mir hier nicht ...

      > doof ausgedrückt:
      wenn ich beim debuggen ... die Linq-Abfrage anschaue ... dann sind ja
      alle daten "drin" :-) ... ergo müsste es doch irgend ne LOGIK geben
      wo man auf die entsprechende Dimension zugreifen kann (und zwar in der Linqabfrage) ...

      die console.writeline kann ja auch (hab nicht nachgeschaut obs korrekt ist)
      mit {0} oder so entsprechend zugreifen ...

      bin ich hier gedanklich auf dem falschen dampfer ?
      Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
      Um heute vorm PC zu sitzen!

      Comment


      • #4
        Hallo,

        2 Dinge:
        1. Ich hab dich ja schon mal daraufhingewiesen dass deine ... unnötig sind und (mich) beim Lesen stören. In Zukunft werde ich auch darauf verzichten das zu lesen.
        2. In meiner obigen Antwort hab ich 2 nicht-rhetorische Fragen gestellt und daher erwarte ich - wenn ich dir helfen soll - dass du diese Fragen auch beantwortestet.



        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          vorweg - sorry, des mit den pünktchen ist ne doofe angewohnheit


          Originally posted by gfoidl View Post
          LINQ kann mit allem arbeiten was IEnumerable<T> implementiert. Ist das hier der Fall?
          gute Frage, ich kenn mich mit IEnumerable nicht (gut) aus

          > auch der Ersatz durch z.B. eine "Structur"

          Code:
          dim CMGruppe(Counts) as _CMGroupe
          
           Structure _CMGroupe
                  Public Gruppe As Integer
                  Public Anzahl As Integer
              End Structure
          hat bereits ca. 50% mehr zeit benötigt (7 statt 3,5 sek.)

          Originally posted by gfoidl View Post
          Gibts es sonst für das mehrdimensionale Array eine Methode ala GetDimension?

          während der "optimierungen" lass ich die daten brav in dem array
          und die ergebnisse packe ich dann, wenns fertig ist, in was passenderes
          rein.
          ist wohl der beste weg.

          danke dennoch
          Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
          Um heute vorm PC zu sitzen!

          Comment


          • #6
            Hallo,

            kennst du Donald E. Knuths Zitat "premature optimization is the root of all evil"? Das würde ich dir raten zu beherzigen.

            Wenns aber unbedingt "optimal" sein soll dann sind die mehrdimensionalen Arrays sowieso nicht die Wahl. Ich hab ja vorhin schon von jagged Arrays geschrieben. Der JITer unterstätzt nämlich Optimierungen für SZ_Arrays. Aber das sollte nicht relevant sein. Schreib den Code so dass er leserlich, wartbar und den OO-Regeln entspricht. Dann ist er automatisch optimal.


            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Originally posted by gfoidl View Post
              Hallo,

              kennst du Donald E. Knuths Zitat "premature optimization is the root of all evil"? Das würde ich dir raten zu beherzigen.
              wohl wahr ! (die zeit mag ich gar nicht ausrechnen, welche ich für performance investiert habe:-)

              werde jetzt allerdings gleich mal an die jagged Arrays rangehen.

              PS: ich habs jetzt andersrum gemacht:

              [highlight=vbnet]
              Dim counts As Integer = myAktCharts.charts(zeile).Chart.Count
              Dim chartGr = From cgr As ZedGraph.StockPt In myAktCharts.charts(zeile).Chart _
              Let Matrix = cgr.myIndex(1, 0) _ ' hier ist des array drin
              Group By Matrix Into Group, Count()


              Dim chartErg = From ceg In chartGr _
              Let Proz As Single = (ceg.Count * 100) / counts _
              Let ANZ = ceg.Count _
              Select ceg.Matrix, ANZ, Proz Distinct

              'Dim dt As New DataTable
              'dt = LinTB(chartErg)
              dgvGenlist.DataSource = chartErg.ToList



              [/highlight]


              Bem: damit hier schluss ist ... schreib ichs hier rein

              zedgraph bzw. die anzeige kommt am ende der daten raus ... und hat
              keinen einfluss auf die geschwindigkeit. die daten stehen halt bereits
              in einer abgeleiteten von zedgraph verarbeitbaren classe (stockpt) drin
              damit am ende die anzeige - welche ein gaaaaaanz anderer optimierungsteil WAR -
              funktiniert danke nochmals für deine hilfe
              Zuletzt editiert von Fremder; 02.09.2010, 17:40.
              Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
              Um heute vorm PC zu sitzen!

              Comment


              • #8
                Hallo,

                werde jetzt allerdings gleich mal an die jagged Arrays rangehen.
                Wenn ich dann deinem Code entnehme dass du ZedGraph zur Diagrammerstellung verwendest verstehe ich den Sinn dahinter auch nicht ganz. Nicht das ZedGraph schlecht ist - ganz im Gegenteil - es im Datenfluss wird wohl das Zeichnen die Bremse sein. Von daher ist jegliche (fragwürdige) Optimierung an einer anderen Stelle nicht ratsam. Im Zweifel nimme einen Profiler um das "Bottleneck" zu finden.

                Auch wenn du LINQ verwendest sind sämtliche Vorteile von jagged Arrays wieder dahin da LINQ diese als IEnumerable<T> ansieht und mit denen nur via IEnumerator<T> arbeiten kann (manche Methoden prüfen zwar auf ICollection<T> aber das ändert hier nichts). Insofern ist der Unterschied zwischen T[][] und List<T> oder sonst irgendwas was die Schnittstelle implementiert nicht vorhanden.

                Von daher beschäftige dich lieber mit "weltlicheren Probleme"


                mfG Gü
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment

                Working...
                X