Wie setzt man JS array.filter() in .net um?

chmee

verstaubtes inventar
Premium-User
*Grrr* Ich sitze hier schon so einige Minuten und überlege, wie ich folgende JS-Zeile in c# (mit list<int>) umsetze, ohne ineffizient zu werden. (LINQ kann ich leider nicht benutzen, warum auch immer..)

Code:
P = Wert;
A = A.concat(B.filter(function(p) { return p != P && A.indexOf(p) == -1 } ));

Im Klartext:
Verbinde A und B unter den Filterbedingungen:
  1. Der Wert P soll aus dem zu joinenden Array gefiltert werden
    (vorgegebener Wert soll nicht hinzugefügt werden)
  2. Auch der Wert p soll - wenn vorhanden - raus
    (Duplicates?!)
Hab ich das überhaupt richtig verstanden?
2. scheint mir ein simples Union zu sein.


Danke im voraus und mfg chmee
 
Hallo,

wenn du generell Duplikate vermeiden möchtest könntest du auch einfach ein Set verwenden...
hier eine Variante ohne Linq

C#:
using System;
using System.Collections.Generic;
using System.Text;

namespace De.Tutorials.Dotnet.Training
{
    class FilterExample
    {
        static void Main(string[] args)
        {

            List<int> a = new List<int>() { 1, 3, 5, 7 };
            List<int> b = new List<int>() { 2, 4, 6, 8, 1, 2, 3 };

            var set = new HashSet<int>(a);
            set.UnionWith(b);
            set.RemoveWhere(i => i == 4);

            Console.WriteLine(string.Join(",", set));
        }
    }
}

... hier zum Spaß trotzdem noch eine Linq Variante:
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace De.Tutorials.Dotnet.Training
{
    class FilterExample
    {
        static void Main(string[] args)
        {

            List<int> a = new List<int>() { 1, 3, 5, 7 };
            List<int> b = new List<int>() { 2, 4, 6, 8, 1, 2, 3 };

            var set = a.Union(b).Except(new int[]{4});

            Console.WriteLine(string.Join(",", set));

        }
    }
}

Ausgabe:
Code:
1,3,5,7,2,6,8

Gruß Tom
 
Thomas, vielen Dank. Weil mir die Linq-Version so gut gefällt, frag ich mich grad, warum ich (obwohl ich .net 3.5 SP1 installiert hab) nen Fehler bekomme, wenn ich using System.Linq; angebe..

?(Oder liege ich einem Trugschluss auf, weil ich denke, dass 3.5 SP1 den Befehlssatz von 3.0 innehat, quasi abwärtskompatibel)? Hmpf.. Möglich, dass ich unachtsamerweise diese Compact-Framework-Version installiert habe.. *grr*

mfg chmee
 
Zuletzt bearbeitet:
Die Frage als Solche ist ja schon beantwortet.. Hmm, nun die Bonushilfe :D

Also, nicht ganz so einfach zu beantworten - ich code nicht unter VS, sondern im eingebauten Codeeditor von vvvv - und scheinbar hat der sich verschluckt und greift lediglich auf net2.0 zu. Anders kann ich es mir nicht erklären.. (Ich hab nun diese 2. Frage auch in deren Forum gestellt)

mfg chmee
 
Zurück