2016-08-03 6 views
1

Goodmorning、C#分割リストを簡素化

私はPython環境から来て、C#に向っています。

私は、幅の広いリストを所定の長さの狭いリストに分割します。

次のコードを簡略化する方法はありますか? 私の推測では、少し遅く、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; 

私はこの便利な方法

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

を見つけた。しかしそれは、次のエラーが発生します:私はMcNeelはからサイソフトウェアのバッタインタフェースに取り組んでいます

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) 

ありがとうございます!そのメソッドを使用する

+0

2番目のコードでは、 'var z = Chunk(x、10); 'はメソッド外です... – DVK

答えて

1

にチャンクメソッドを呼び出したい場合、私はついにそれを考え出しthisキーワードを削除してください。

このスレッドは私を大いに助けました。

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

方法はのRunScript別の方法の中で定義されたので、問題が発生しました。 ソリューションは

// <Custom additional code> 

code here 

// <Custom additional code> 

でそれを書き留めてあるので、結果は次のとおりです。すべての貴重なヒントについては

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> 

感謝。

+0

あなたはそれを理解してうれしいです。次回はコード全体を投稿してください(メソッド全体)。他の人があなたを助けるのに役立ちます。 – DaniDev

0

構文は次のようになります。

var B = SD_Data.Chunk(314); 

チャンクはExtension Methodとして宣言されています。

+0

ありがとう、1つの問題が解決しました。私はダムのエラーには申し訳ありません、私はCで非常に初心者です#。 –

0

あなたが標準的な方法

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