从列表中逐行删除字符串

2024-02-06

我的问题是,如果我有一个如下所示的列表,

var list = new List<string>();
list.Add("12345");
list.Add("Words");
list.Add("Are");
list.Add("Here");
list.Add("13264");
list.Add("More");
list.Add("Words");
list.Add("15654");
list.Add("Extra");
list.Add("Words");

我希望能够从列表中删除所有以数字开头的字符串,并将它们之间的字符串连接起来,如下所示,

文字在这里
更多单词
额外的话

这个逻辑看起来怎么样?以下是我一直在尝试做的事情,但我无法首先了解如何删除带有数字的字符串,更不用说在删除带有数字的字符串时创建换行符了。

foreach (string s in list)
        {
            if (s.StartsWith("1"))
                s.Remove(0, s.Length);
            else
                String.Concat(s);
        }

        foreach (string p in list)
            Console.WriteLine(p);

您正在做的是对数据进行“分块”或“分页”,但是您需要逐一遍历每个源元素以确定页面的开始和停止位置。

public static IEnumerable<ICollection<T>> ChunkBy<T>(IEnumerable<T> source, Func<T, bool> predicate)
{
    ICollection<T> currentChunk = new List<T>();
    foreach (var item in source)
    {
        if (predicate(item))
        {
            if (currentChunk.Any())
            {
                yield return currentChunk;
                currentChunk = new List<T>();
            }
        }
        else
        {
            currentChunk.Add(item); 
        }
    }

    if (currentChunk.Any())
    {
        yield return currentChunk;
    }
}

这是一个可重用的方法(你可以添加this到第一个参数的开头,使其成为扩展方法),利用IE可枚举 https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerator-1?view=net-6.0#remarks and 屈服 https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/yield结果。本质上,您返回一个值流,其中每个值都是一个集合。所以这是一个列表的列表,但术语更加流畅。

这是做什么的

  1. 从当前项目“页面”的空临时列表开始。
  2. 循环遍历源中的每个元素。
  3. For each element, decide if it's the start of a new page or not.
    • 如果它是一个新块,则返回您为当前卡盘保存的内容,假设保存的块不为空。
    • 如果不是新块,则将该条目添加到当前块中。
  4. 当您完成所有条目后,发送最后一个块,假设它不为空。

你可以这样调用这个方法:

var output = ChunkBy(list, x => char.IsNumber(x[0]))
    .Select(ch => string.Join(" ", ch));
        
foreach (var o in output)
    Console.WriteLine(o);

这使

Words Are Here
More Words
Extra Words
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从列表中逐行删除字符串 的相关文章

随机推荐