【问题标题】:Join rest of string array加入字符串数组的其余部分
【发布时间】:2013-02-02 18:40:50
【问题描述】:
private static string SetValue(string input, string reference)
{
    string[] sentence = input.Split(' ');
    for(int word = 0; word<sentence.Length; word++)
    {
        if (sentence[word].Equals(reference, StringComparison.OrdinalIgnoreCase))
        {
            return String.Join(" ", sentence.subarray(word+1,sentence.Length))
        }
    }
}

我怎样才能轻松完成sentence.subarray(word+1,sentence.Length) 或以其他方式做到这一点?

【问题讨论】:

标签: c# join substring arrays


【解决方案1】:

String.Joinan overload 专门为此:

return String.Join(" ", sentence, word + 1, sentence.Length - (word + 1));

【讨论】:

  • 谢谢!我没注意到! :D
【解决方案2】:

您可以使用重载 Whereindex

return string.Join(" ", sentence.Where((w, i) => i > word));

【讨论】:

  • 不要这样做。 X.Where((x, i) =&gt; i &gt; I) 提供与 X.Skip(I + 1) 相同的结果,但效率略低,需要更长的时间才能弄清楚。
  • @Rawling:是的,只是另一种方法,但不要在成熟的优化上掉以轻心,我喜欢使用SKip(word + 1) 的方法,它更简单。
【解决方案3】:

如果您正在严格寻找独立于 string.Join() 函数的子数组解决方案,并且您使用的是支持 Linq 的 .NET 版本,那么我可以推荐:

sentence.Skip(word + 1);

【讨论】:

  • 我的原始答案包括最后的 ToArray() 调用,因为请求了 .NET 版本的子数组。
  • 继续编辑它,希望没有其他人会为您“更正”它。
【解决方案4】:

或者,您可以使用 SkipWhile 代替您的 for 循环。

private static string SetValue(string input, string reference)
{
    var sentence = input.Split(" ");
    // Skip up to the reference (but not the reference itself)
    var rest = sentence.SkipWhile( 
        s => !s.Equals(reference, StringComparison.OrdinalIgnoreCase));
    rest = rest.Skip(1); // Skip the reference
    return string.Join(" ", rest);
}

【讨论】:

  • Doesn't SkipWhile 包括谓词为真的项目?
  • 另外,我不确定 Enumerable 是否有 Join。您可能需要在Skip(1) 之后添加ToArray
  • IEnumerable 有一个Join Method,但不是the Join Method you mean。但是,String.Join 方法有 an overload 接受 IEnumerable.
  • 现在您需要添加一些分号和变量声明以使其真正编译:-)
  • 对。最近红宝石太多了^^'。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
相关资源
最近更新 更多