从数组中删除第一个元素。

18

我是一名使用C#的PHP开发者。我正在使用一种技术,通过将字符串分解为数组,然后将第一个元素移出数组并将剩余部分转换回字符串来从大字符串中删除文本块。

在PHP中(一种很棒且易于使用的语言)只需要:

$array = explode('somestring',$string);
array_shift($array);
$newstring = implode(' ', $array);

我做完了。

我很生气c#不允许我创建动态数组,并且不像PHP那样提供默认函数来处理数组。我必须创建列表并预定义键结构,而不是动态数组。但我是新手,我相信仍然有同等优美的方法可以用c#实现这个目标。

有人能展示一种干净的方法来使用c#实现这个目标吗?

问题重述:如何使用c#代码从数组中删除第一个元素。

这是我到目前为止的进展,但RemoveAt在调试时会抛出错误,所以我不认为它有效:

//scoop-out feed header information
if (entry_start != "")
{
    string[] parts = Regex.Split(this_string, @entry_start);
    parts.RemoveAt(0);
    this_string = String.Join(" ", parts);
}

问题是如何在分割字符串后创建一个不指定长度的数组? - Brad Semrad
1
P.S. C#是一种编程语言。PHP是一种脚本语言。针对不同的目的,有不同的设计。 - John Saunders
1
@atwellpub 的 RemoveAt 方法适用于通用集合,而不是数组。Intellisense 甚至不应该为 parts 数组提供 RemoveAt - JYelton
7个回答

38

我很生气 c# 不允许我创建动态数组

你可以看看 List<T> 类。它的 RemoveAt 可能值得一试。

但对于你特定的场景,你可以简单地使用 LINQ 和 Skip 扩展方法(不要忘记在文件中添加 using System.Linq; 以便将其引入作用域):

if (entry_start != "")
{
    string[] parts = Regex.Split(this_string, @entry_start).Skip(1).ToArray();
    this_string = String.Join(" ", parts);
}

感谢大家的帮助和支持。我非常感激。谢谢Darin!干杯! - atwellpub

11

C#并不是被设计成快速而肮脏的语言,也没有特别擅长处理文本操作。此外,你使用的从字符串开头移除一部分的技巧,我认为有些疯狂。

为什么不直接使用String.Substring(int start, int length)结合String.IndexOf("your delimiter")呢?


7
这里是相应的C#代码:
string input = "a,b,c,d,e";
string[] splitvals = input.Split(',');
string output = String.Join(",", splitvals, 1, splitvals.Length-1);
MessageBox.Show(output);

4
您可以使用LINQ来完成这个任务:
if (entry_start != "")
    this_string = String.Join(" ", Regex.Split(this_string, @entry_start).Skip(1).ToArray());

2
如上所述,您可以使用LINQ。 Skip(int) 将返回一个 IEnumerable<string>,您可以将其转换回数组。
string[] myArray = new string[]{"this", "is", "an", "array"};
myArray = myArray.Skip(1).toArray();

2
string split = ",";
string str = "asd1,asd2,asd3,asd4,asd5";
string[] ary = str.Split(new string[] { split }, StringSplitOptions.RemoveEmptyEntries);
string newstr = string.Join(split, ary, 1, ary.Count() - 1);

以“,”为分隔符进行分割。删除第一条记录。然后再用“,”组合回来。


0

如果您更喜欢泛型列表而不是数组,那么它们的工作方式更像PHP数组。

List<T>

但是,如果您的目标是“从大字符串中删除一块文本”,则更简单的方法是:

string Example = "somestring";
string BlockRemoved = Example.Substring(1);
// BlockRemoved = "omestring"

编辑

我误解了问题,认为您只是从由组成字符串的字符组成的数组中删除第一个元素。

要通过分隔符拆分字符串,请查看String.Split方法。这里提供了一些很好的示例


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接