【问题标题】:Edit array elements编辑数组元素
【发布时间】:2011-11-11 00:57:14
【问题描述】:

我有一个驱动器号数组,我需要在每个字母后附加一个冒号,然后将数组传递给另一个函数。我可以这样做还是需要创建一个新数组?或者可能根本不是一个数组,而是某种列表?

string source = "C|D|E";
string[] sourcearray = source.Split('|');
foreach (string driveletter in sourcearray)
{
    //need to append ":" to each drive letter
}

编辑:有时源数组可能以管道结尾:

string source = "C|D|E|";

当这种情况发生时,如果我使用通用 for 循环,数组中的最后一个元素将是一个冒号,而我不能拥有这个。如何最好地处理这个?发生这种情况时,最终数组需要如下所示:

C: D: E:

谢谢。

【问题讨论】:

  • 到编辑:您可以告诉 Split 函数忽略空值。检查函数重载。

标签: c# arrays


【解决方案1】:

字符串是不可变的,因此您不能更改字符串实例,但必须使用新字符串更改数组槽:

string source = "C|D|E";
string[] sourcearray = source.Split(new []{'|'}, StringSplitOptions.RemoveEmptyEntries);
for(int i=0; i < sourcearray.Length; i++)
{
   sourcearray[i] = sourcearray[i] + ":";
}

【讨论】:

  • 谢谢。编辑了针对特定案例的问题。
  • @SixHouse:您可以使用 Split 的重载来跳过空条目,检查我的编辑。
【解决方案2】:

替换你的for循环
 string[] resultArray = sourcearray.Select(s => s + ":").ToArray();

重新编辑:

  string source = "C|D|E|";

这里的最佳解决方案是 string.Split() 方法的特殊变体。不幸的是,这需要一个分隔符数组,所以我们得到:

sourceArray = source.Split(new char[] {'|'}, 
          StringSplitOptions.RemoveEmptyEntries);

【讨论】:

  • 这家伙显然对 C# 很陌生,我不确定 Lambda 表达式是一个合适的解决方案...
  • @KristianFenn:这就是为什么需要告诉他一些关于 Lambda 表达式的事情。
【解决方案3】:
for (var i = 0; i < sourcearray.Length; i++)
{
   sourceArray[i] += ":";
}

【讨论】:

    【解决方案4】:
    string[] sourcearray = source.Split('|').Select(s => s + ":").ToArray();
    

    【讨论】:

      【解决方案5】:
      var newArray = source.Split('|').Select(s => s + ":").ToArray();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-07
        • 1970-01-01
        • 1970-01-01
        • 2013-03-29
        • 1970-01-01
        • 1970-01-01
        • 2019-07-19
        相关资源
        最近更新 更多