【问题标题】:How to append strings in an array using C# or LINQ如何使用 C# 或 LINQ 在数组中追加字符串
【发布时间】:2014-05-07 19:14:31
【问题描述】:

我有一个字符串SelectedPath,它与/ 字符组合在一起。我已使用/ 字符拆分字符串并将其存储在字符串数组中,如下所述。

string SelectedPath = "Users/Shangai/China/server";
string[] OUs = SelectedPath.Split('/').Reverse().ToArray();
string container = "";
        for(int i=0; i<OUs.Length;i++)
        {
            container +="OU="+OUs[i].ToString()+",";
        }

结果:

container="OU=Users,OU=SanFracisco,OU=Americas,OU=server.local,"

我想要下面提到的格式的上述container 值。

container="OU=Users,OU=Newyork,OU=Americas,DC=server"

注意:最后一个数组值必须添加前缀DC= 而不是OU=

如何以上述格式附加此字符串。如果我们可以用 LINQ 做到这一点,那真是太感谢了。请给我一些建议来实现这一目标。另外有没有可能通过 LINQ 或 Lambda 表达式来做到这一点?如果是这样,请给我同样的建议。

【问题讨论】:

  • OUSelectedNodePath 的值是多少?如果没有在任何地方使用,为什么代码中有SelectedPath
  • 我已经编辑了我的代码。仅限其 SelectedPath。

标签: c# arrays string linq


【解决方案1】:

另一种方式:

string SelectedPath = "Users/Shangai/China/server ";
string[] OUs = SelectedPath.Split('/');
string container = string.Join(",", OUs.Select((s, i) => (i == OUs.Length - 1 ? "DC=" : "OU=") + s));

【讨论】:

    【解决方案2】:

    您可以使用TakeLast 获取除最后一项之外的所有内容,然后添加最后一项。 String.Join 然后可以将数组转换为带有所需分隔符的字符串。我没有费心在这里检查length &gt;= 2,但如果需要,您可以处理。

    string container = string.Format(
        "OU={0},DC={1}", 
        string.Join(",OU=", OUs.Take(OUs.Count() - 1)), 
        OUs.Last());
    

    【讨论】:

      【解决方案3】:

      为了获得列表的第一部分,您需要执行以下操作:

      var firstPart = ous.Take(ous.Count - 1);
      

      你的最后一个元素是

      var lastElement = ous.Last();
      

      所以添加"OU=" 很简单:

      var firstPartPrepended = firstPart.Select(x => "OU=" + x);
      

      最后

      var complete = String.Join("," firstPartPrepended) + ",DC=" + lastElement;
      

      【讨论】:

        【解决方案4】:

        使用string.Join

        string container = "OU=" + string.Join(",OU=", OUs.Take(OUs.Length - 1));
        container += ",DC=" + OUs.Last();
        

        【讨论】:

        • @elgonzo,为什么?这会改变输出,我认为不需要这样。
        • @Downvoter,你能指出答案中的错误吗?
        • 我不是反对者,但您的示例代码仍然错过了第一个 'OU='(string.Join 只是将 ",OU=" 放在了元素之间,但没有在第一个元素之前)。
        【解决方案5】:

        像这样更改您的 for 循环:

        for(int i=0; i < OUs.Length - 1; i++)
        { 
            container += string.Format("OU= {0},", OUs[i]);
        }
        
        container += string.Format("DC= {0}", OUs[OUs.Length - 1]);
        

        简单地迭代直到最后一项。然后在循环之后附加DC=前缀。在这种情况下我更喜欢最简单的解决方案,而不是无缘无故地多次创建不必要的枚举器,当它真的使用LINQ有用且必要,否则使用简单的循环不会丢失任何内容。

        【讨论】:

          猜你喜欢
          • 2018-10-05
          • 2011-08-24
          • 2019-08-30
          • 1970-01-01
          • 2023-03-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多