将字符串拆分为具有特定数量元素的数组,c#

时间:2012-07-04 08:27:38

标签: c# c#-4.0

我有一个字符串,其中包含由行(\ 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]);
                } 

我可以在不使用List或任何其他数据结构的情况下执行此操作吗?我的意思是直接将特定数量的术语提取到数组(训练)中?提前谢谢。

3 个答案:

答案 0 :(得分:7)

LINQ怎么样? .Take()扩展方法似乎适合您的帐单:

List<string> trainterms = traindocs[tr].Trim().Split('\n').Take(1000).ToList();

答案 1 :(得分:2)

根据MSDN,您可以使用split方法的重载版本。

  

public string [] Split(char [] separator,int count,     StringSplitOptions选项)

     

参数

     

separator类型:System.Char []一个Unicode字符数组   分隔此字符串中的子字符串,一个包含no的空数组   分隔符,或null。

     

count类型:System.Int32最大数量   子串返回。

     

options类型:System.StringSplitOptions   StringSplitOptions.RemoveEmptyEntries以省略空数组元素   从数组返回;或StringSplitOptions.None包含空   返回数组中的数组元素。

     

返回值

     

类型:System.String []一个数组,其元素包含子字符串   在此字符串中由一个或多个字符分隔   分隔器。有关详细信息,请参阅“备注”部分。

所以这样:

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个)元素。因此,如果你愿意的话,我认为达林的解决方案可能会更清晰。

答案 2 :(得分:1)

如果您想要最有效(最快)的方式,则必须使用String.Split的重载,并传递所需的项目总数。

如果您想轻松一点,请使用LINQ。