2016-07-10 14 views
1

Ich bin insgesamt Noob, wenn es um C# Ich migrierte auf eine neue Plattform, die C# verwendet, versuchen, Handelsregeln auf neues Design zu migrieren. ich brauche diese Array/Liste Verwaltung question C#, insgesamt noob

hier

für Algorithmus zu tun, ist die Frage ich habe Tasten Array a, b, c, d ich habe Wert set1 3,8,9,10 ein anderer Wert set2 77,89,100,76

diese Werte miteinander verwandt sind, (a) Werte 3,77 und so weiter

, was ich brauche ist, muss ich Filter mit Wert 2, zum Beispiel nur mehr als 80 dann Werte (wahrscheinlich Erstellen Sie eine neue Liste mit den restlichen Zeilen), aus der verbleibenden Liste muss ich den Schlüsselnamen mit dem höchsten Wert set1

erhalten

ich es mit diesem wahrscheinlich sehr schlecht versucht,

Array.Sort auf eindimensionales Array Wert set1, Wert nehmen [3] - wenn dies dann gleich 3 ist (wenn der Wert set1> 80 valuefound sonst Wert nehmen [2 ] und wiederholen

können Sie mir einen einfacheren Weg zeigen, bitte meine Unerfahrenheit berücksichtigen und sind so mehr informatioan und Code wie möglich

+0

Verwenden Sie Klassen und verwalten sie mit spezifischen Sammlungstypen wie Wörterbuch oder Liste – Steve

Antwort

0

Eine andere Möglichkeit, zu tun, was Sie wollen, wäre eine Dictionary zu verwenden, die Schlüssel und Werte zusammen, anstatt sie in verschiedenen Arrays hält.

Dictionary<string, int[]> dic = new Dictionary<string, int[]>() 
{ 
    { "a", new[] { 3, 77 } }, 
    { "b", new[] { 8, 89 } }, 
    { "c", new[] { 9, 100 } }, 
    { "d", new[] { 10, 76 } } 
}; 

Dann LINQ verwenden Sie den Schlüssel wirklich leicht

string key = dic.Where(x => x.Value[1] > 80) // Filter by second value 
       .OrderByDescending(x => x.Value[0]) // Order by first value 
       .First() // Get the max value 
       .Key; // Get the matching key 
1

Sie wirklich mehr über Linq beginnen sollte lernen. C# hat sehr mächtige funktionale Funktionen, mit denen Sie diese Dinge wirklich leicht machen können. Es macht wirklich Spaß :)

Grundsätzlich macht dieser Code, was Sie wollen mit 3 Zeilen.

var set1 = new[] {3, 8, 9, 10}; 
     var set2 = new[] {77, 89, 100, 76}; 

     var maxFromSet1 = set1 
      .Zip(set2, (fromSet1, fromSet2) => new {FromSet1 = fromSet1, FromSet2 = fromSet2}) //Match the sets to one another 
      .Where(zipped => zipped.FromSet2 > 80) // Filter by value 
      .Max(zipped => zipped.FromSet1); //Gets max 
+0

ich diese Fehlermeldung zu sehen abrufen kann ‚System.Linq.ParallelEnumerable.Max < TSource, TResult> (System.Linq.ParallelQuery , System.Func ) 'ist eine' Methode ', die im angegebenen Kontext nicht gültig ist – kenan

+0

Ich habe den Code ausgeführt und es funktioniert, haben Sie Änderungen an vorgenommen es? – lavuy

+0

@peter Ich habe den ganzen Block kopiert. Aber das ist kein visuelles Studio. vielleicht fehlen mir einige using-Anweisungen, diese existieren mit System.Linq.ParallelEnumerable; mit System.Linq; – kenan