2016-08-03 1 views
1

Goodmorning,C# Les listes fractionnées simplifient le code

Je viens de l'environnement Python et je deviens C#. Je divise une liste plus large en listes plus étroites avec une longueur prescrite.

Existe-t-il un moyen de simplifier le code suivant? Je suppose que c'est un peu lent et qu'il ne suit pas correctement les règles de codage courantes de C#.

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; 

J'ai trouvé cette façon utile

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); 

Mais il soulève l'erreur suivante:

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) 

Je travaille sur l'interface Grasshopper du logiciel Rhinocéros de Lamborot.

Merci d'avance!

+0

Dans votre deuxième code même, 'var z = Chunk (x, 10);' est en dehors de la méthode ... – DVK

Répondre

1

J'ai finalement compris.

Ce fil m'a beaucoup aidé.

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

La question a été soulevée depuis la méthode a été définie dans une autre méthode, qui est RunScript. La solution consiste à écrire dans le

// <Custom additional code> 

code here 

// <Custom additional code> 

donc le résultat est:

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> 

Merci à tous pour les précieux conseils.

+0

content que vous l'ayez compris. La prochaine fois s'il vous plaît poster votre code entier (méthode entière). Cela aide les autres à t'aider. – DaniDev

0

La syntaxe à utiliser cette méthode serait la suivante:

var B = SD_Data.Chunk(314); 

Chunk est déclarée comme Extension Method.

+0

Merci, un problème résolu. Je suis désolé pour les erreurs stupides, je suis tout à fait novice en C#. –

0

Supprimez le mot clé this si vous voulez appeler la méthode Chunk de façon standard

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