2

次の例に示すように、行(\ n)で区切られた順序付けられた用語の数で構成される文字列があります(注、私が持っている文字列は文字列の配列の要素です)

term 1
term 2
.......
.......
term n

特定の数の用語を分割したいと思います。たとえば、(1000) だけと言って、残りの用語を破棄します。私は次のコードを試しています:

string[] training = traindocs[tr].Trim().Split('\n');
                List <string> trainterms = new List<string>();
                for (int i = 0; i < 1000; i++)
                {
                    if (i >= training.Length)
                        break;
                    trainterms.Add(training[i].Trim().Split('\t')[0]);
                } 

リストやその他のデータ構造を使用せずにこの操作を実行できますか? つまり、特定の数の用語を配列(トレーニング)に直接抽出するだけですか?? 前もって感謝します。

4

3 に答える 3

7

LINQはどうですか?.Take ()拡張メソッドの種類は、あなたの法案に合っているようです:

List<string> trainterms = traindocs[tr].Trim().Split('\n').Take(1000).ToList();
于 2012-07-04T08:29:46.787 に答える
2

MSDNによると、オーバーロードされたバージョンのメソッドを使用できますsplit

public string[] Split( char[] セパレーター、int カウント、StringSplitOptions オプション )

パラメーター

separator 型: System.Char[] この文字列の部分文字列を区切る Unicode 文字の配列、区切り文字を含まない空の配列、または null。

count 型: System.Int32 返される部分文字列の最大数。

options 型: System.StringSplitOptions StringSplitOptions.RemoveEmptyEntries は、返された配列から空の配列要素を省略します。または StringSplitOptions.None を使用して、返される配列に空の配列要素を含めます。

戻り値

型: System.String[] 区切り文字で 1 つ以上の文字で区切られた、この文字列内の部分文字列を要素に含む配列。詳細については、「備考」セクションを参照してください。

したがって、次のようになります。

String str = "A,B,C,D,E,F,G,H,I";
            String[] str2 = str.Split(new Char[]{','}, 5, StringSplitOptions.RemoveEmptyEntries);
            System.Console.WriteLine(str2.Length);
            System.Console.Read();

印刷します:5

編集:さらに調査すると、countパラメーターは分割がいつ停止するかを指示するだけのようです。文字列の残りは最後の要素に保持されます。

したがって、上記のコードは次の結果をもたらします: [0] = A, [1] = B, [2] = C, [3] = D, [4] = E,F,G,H,I、これはあなたが求めているものではありません。

これを修正するには、次のようにする必要があります。

String str = "A\nB\nC\nD\nE\nF\nG\nH\nI";
            List<String> myList = str.Split(new Char[]{'\n'}, 5, StringSplitOptions.RemoveEmptyEntries).ToList<String>();
            myList[myList.Count - 1] = myList[myList.Count - 1].Split(new Char[] { '\n' })[0];
            System.Console.WriteLine(myList.Count);
            foreach (String str1 in myList)
            {
                System.Console.WriteLine(str1);
            }
            System.Console.Read();

上記のコードは、最初の 5 つ (この場合は 1000) の要素のみを保持します。したがって、必要に応じて、ダーリンのソリューションの方がクリーンであると思います。

于 2012-07-04T08:34:39.313 に答える
1

最も効率的な(最速の)方法が必要な場合は、オーバーロードを使用してString.Split、必要なアイテムの総数を渡す必要があります。

簡単な方法が必要な場合は、LINQ を使用してください。

于 2012-07-04T08:35:51.847 に答える