【问题标题】:Using LINQ how to split string (not on character but on index)使用 LINQ 如何拆分字符串(不是在字符上,而是在索引上)
【发布时间】:2012-05-18 19:16:26
【问题描述】:

我想分割一个字符串

输入:

ABCDEFGHI

输出:

ABC, DEF, GHI

一种方法是使用 For 循环。

string str = "ABCDEFGHI";

List<string> lst = new List<string>();

string temp = "";

for(int i = 0; i < str.Length; i++)
{
    temp = str[i].Tostring();

    if((i + 1) % 3 == 0)
    {
        lst.Add(temp);
        temp = "";
    }
}

string final_str = string.Join(", ", lst);

但是如何使用LINQ 做到这一点?

【问题讨论】:

标签: c# linq extension-methods


【解决方案1】:

还有一个(没有 MoreLinq):

var str = "ABCDEFGHI";
var tmp = str.Select((i, index) => new { i, index })
             .GroupBy(g => g.index / 3, e => e.i)
             .Select(g => String.Join("", g));
var final_string = String.Join(", ", tmp);

【讨论】:

    【解决方案2】:

    MoreLinq的帮助下

    List<string> lst = str.Batch(3).Select(s => String.Join("",s)).ToList();
    

    【讨论】:

      【解决方案3】:

      使用MoreLinq.Batch

      var result = str.Batch(3);
      

      结果类型为 IEnumerable>,可以使用 ToArray 使其为 IEnumerable

      编辑我第一眼就忘记了最后的加入语句

      var finalStr = String.Join(",",str.Batch(3).Select(x=>new String(x.ToArray())))
      

      【讨论】:

        【解决方案4】:
        var str = "ABCDEFGHI";
        
        var result = testStr.Select(s => testStr.IndexOf(s))
                           .Where(i => i%3 == 0)
                           .Select(i => testStr.Substring(i,3))
                           .Aggregate("", (a,s) => a += s + ",");
        

        【讨论】:

        • 如果任何字符在字符串中出现多次,则不起作用
        • 强烈反对,因为示例字符串非常具体。
        • 嗯,好的。您对示例字符串非常具体且不太清楚是正确的;我删除了反对票。但是 Nikhil 提供的代码适用于其他字符串,而您的则不行。
        【解决方案5】:
        String.Join("", str.Select((x, i) => (i + 1)%3 == 0 ? x + " " : x.ToString()))
        

        【讨论】:

        • 不起作用,因为如果字符串的长度可以被三整除,这会添加一个额外的逗号添加字符串的末尾。
        • 啊,是的,我什至没有看到逗号。 :) 当然可以修剪它,这将使这个调用比你的版本更短。
        猜你喜欢
        • 2011-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-27
        • 1970-01-01
        • 1970-01-01
        • 2022-01-14
        相关资源
        最近更新 更多