Csharp/C#教程:使用LINQ从字符串中删除字符分享


使用LINQ从字符串中删除字符

我正在尝试通过编写一些简单的扩展方法来刷新我的LINQ。 有没有更好的方法来编写如下函数从字符串中删除给定的字符列表(使用LINQ)?

它帮助我思考LINQ首先依赖的扩展方法:

public static string Remove(this string s, IEnumerable chars) { string removeChars = string.Concat(chars); return new string(s.ToCharArray().Where(c => !removeChars.Contains(c)).ToArray()); } 

但那很难看。 Ergo LINQ。

我在LINQ语句中注意到的差异是我必须使用’select’而使用扩展方法,我不必这样做。

 /// Strip characters out of a string. /// The characters to remove. public static string Remove(this string s, IEnumerable chars) { string removeChars = string.Concat(chars); var stripped = from c in s.ToCharArray() where !removeChars.Contains(c) select c; return new string(stripped.ToArray()); } 

所以我想知道这个(上面的最后一个片段)是否是用于完成字符删除的最简洁的LINQ语句。

我希望第一种forms的扩展方法虽然简化为

 public static string Remove(this string s, IEnumerable chars) { return new string(s.Where(c => !chars.Contains(c)).ToArray()); } 

对于select关键字,它是第二种forms的强制性。 文档说明“查询表达式必须以select子句或group子句终止”。 这就是为什么我会避免使用LINQ语法糖。

尝试这是为了简洁

 public static string Remove(this string source, IEnumerable chars) { return new String(source.Where(x => !chars.Contains(x)).ToArray()); } 

编辑

更新以更正它从源中删除重复项

就个人而言,我倾向于使用非关系情境的第一种语法。 当我需要执行关系操作(连接)时,比如表达式树对SQL,我使用后者。 但是,这只是因为它在一段时间内使用SQL更具可读性。

使用stringBuilder而不是新字符串时,性能会有所提高。 以下结果为:

StringBuilder 00:00:13.9930633 new String 00:00:15.1495309

上述就是C#学习教程:使用LINQ从字符串中删除字符分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

  string s = "ababababajjjaazsiajjsoajiojsioajlmmzaaokpdahgffaiojsia"; var sw = new Stopwatch(); sw.Start(); var toRemove = new char[] { 'j', 'a', 'z' }; for (int i = 0; i < 1000000; i++) { StringBuilder sb = new StringBuilder(s.Length, s.Length); foreach (var c in s) if (!toRemove.Contains(c)) sb.Append(c); } Console.WriteLine("StringBuilder " + sw.Elapsed); sw.Restart(); for (int i = 0; i < 1000000; i++) { new string(s.Where(c => !toRemove.Contains(c)).ToArray()); } Console.WriteLine("new String " + sw.Elapsed); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1020272.html

(0)
上一篇 2022年1月5日
下一篇 2022年1月5日

精彩推荐