2016-08-03 4 views
1

Goodmorning,C# Geteilte Listen vereinfachen den Code

Ich komme aus der Python-Umgebung und wende mich an C#.

Ich spalte eine breitere Liste in engere Listen mit einer vorgeschriebenen Länge.

Gibt es eine Möglichkeit, den folgenden Code zu vereinfachen? Meine Vermutung ist, dass es ein bisschen langsam ist und nicht richtig C# gemeinsamen Codierungsregeln folgt.

List<object> B = new List<object>(); 
for(int i = 0; i < SD_Data.Count/314; i++) { 
    var SD_Input = SD_Data.Skip(314 * i).Take(314 * i + 313); 
    B.Add(SD_Input); 
} 

A = B; 

Ich habe diese nützliche Art und Weise gefunden

public static IEnumerable<IEnumerable<T>> Chunk<T > (this IEnumerable<T> source, int chunksize) 
{ 
    while (source.Any()) 
    { 
    yield return source.Take(chunksize); 
    source = source.Skip(chunksize); 
    }  
} 
var z = Chunk(x, 10); 

Aber es tut erhöhen den folgenden Fehler:

Error (CS1513): } expected (line 69) 
Error (CS1518): Expected class, delegate, enum, interface, or struct (line 88) 
Error (CS1518): Expected class, delegate, enum, interface, or struct (line 88) 
Error (CS1518): Expected class, delegate, enum, interface, or struct (line 89) 
Error (CS1518): Expected class, delegate, enum, interface, or struct (line 89) 
Error (CS1518): Expected class, delegate, enum, interface, or struct (line 90) 
Error (CS1518): Expected class, delegate, enum, interface, or struct (line 91) 
Error (CS1518): Expected class, delegate, enum, interface, or struct (line 92) 
Error (CS1518): Expected class, delegate, enum, interface, or struct (line 94) 
Error (CS1001): Identifier expected (line 112) 
Error (CS1001): Identifier expected (line 114) 
Error (CS1022): Type or namespace definition, or end-of-file expected (line 115) 

Ich bin auf der Heuschrecken-Schnittstelle von Rhinoceros Software von McNeel arbeiten.

Vielen Dank im Voraus!

+0

In Ihrem zweiten Code, 'var z = Chunk (x, 10);' ist außerhalb der Methode ... – DVK

Antwort

1

Habe ich es endlich anrufen möchten.

Dieser Thread hat mir sehr geholfen.

Working with arrays/list with C# components in Grasshopper 3D

Das Problem angesprochen wurde, da das Verfahren in einem anderen Verfahren definiert wurde, die RunScript ist. Die Lösung ist in der

// <Custom additional code> 

code here 

// <Custom additional code> 

aufzuschreiben, so ist das Ergebnis:

private void RunScript(List<Point3d> SrcPts, List<string> Instrument, List<object> SD_Data, List<double> XY_Angles, List<string> Octave, ref object A, ref object B) 
    { 
    B = Chunk(SD_Data, 314); 
    } 

    // <Custom additional code> 

    public static IEnumerable<IEnumerable<T>> Chunk<T > (IEnumerable<T> source, int chunksize) 
    { 
    while (source.Any()) 
    { 
     yield return source.Take(chunksize); 
     source = source.Skip(chunksize); 
    } 
    } 
    // <Custom additional code> 

Dank alle für die wertvollen Tipps.

+0

froh, dass Sie es herausgefunden haben. Das nächste Mal posten Sie bitte Ihren gesamten Code (gesamte Methode). Es hilft anderen, Ihnen zu helfen. – DaniDev

0

die Syntax, die Methode zu verwenden, würde dies sein:

var B = SD_Data.Chunk(314); 

Chunk als Extension Method erklärt wird.

+0

Danke, ein Problem gelöst. Es tut mir leid für die dummen Fehler, ich bin ziemlich Neuling in C#. –

0

Entfernen Sie die this Schlüsselwort, wenn Sie die Chunk-Methode auf dem Standardweg

public static IEnumerable<IEnumerable<T>> Chunk<T > (IEnumerable<T> source, int chunksize) 
{ 
    while (source.Any()) 
    { 
    yield return source.Take(chunksize); 
    source = source.Skip(chunksize); 
    }  
}