如何将字符串数组拆分为新的字符串数组并删除重复项
Posted
技术标签:
【中文标题】如何将字符串数组拆分为新的字符串数组并删除重复项【英文标题】:How to split a string array into a new string array with remove duplicate 【发布时间】:2019-06-14 22:24:38 【问题描述】:我有一个字符串,但我不知道它的项目数。我想将此字符串数组拆分为一个新数组。之后,我需要删除重复项,如下例所示。
例如在下面:单词“hi”和“friends”出现两次,但我们在第二个数组中写入一次,并不总是必须超过两次,有时超过3次或更多,单词“hi " 和 "friends" 仅作为例子,其他词可能会出现两次或多次)。
例如;
string[] myString = "hello friends", "hi guys", "hi friends", "how are", "123654 u?", "today man", "! ?", "maybe tomorrow", "5 2-", "99 1585126", "(/&&/& _____";
我想把它拆分成一个这样的新字符串数组(根据空格字符);
string[] new = "hello", "friends", "hi", "guys", "how", "are", "123654", "u?", "today", "man", "!", "?", "maybe", "tomorrow","5" ,"2-" ,"99", "1585126", "/&&/&", "_____" ;
【问题讨论】:
【参考方案1】:使用SelectMany
和Distinct
:
string[] newArray = myString.SelectMany(s => s.Split(' ')).Distinct().ToArray();
如果您想以不区分大小写的方式进行比较,请将适当的比较器传递给Distinct
:
string[] newArray = myString.SelectMany(s => s.Split(' ')).Distinct(StringComparer.InvariantCultureIgnoreCase).ToArray();
【讨论】:
最好使用Split(null)
来分隔任何空格而不是一个空格...
@Johnny:然后使用Split()
不带参数。但是以什么方式更好呢? OP 没有提到他想要包含所有空格或换行符
@Rango 代码更健壮。我同意在这个具体的例子中,这并不重要,但通常......
@Johnny:不一定更健壮,这取决于我不知道的 OP 的业务规则。如果他说他想按空格分割(“根据空格字符”),我不提供也可以按其他字符静默分割的解决方案。
@Rango 我忘了。我现在标记它。再次感谢您。【参考方案2】:
你可以写一个函数:
public string[] GetDistinctArray(string[] input) var str = string.Join("",input).Split(' ');return str.Distinct().ToArray();
【讨论】:
【参考方案3】:将“SelectMany”和“Distinct”与“Trim”一起使用:
var arr = myString.SelectMany(x => x.Trim().Split(' ')).Distinct(StringComparer.InvariantCultureIgnoreCase).ToArray();
【讨论】:
为什么要修剪?与最佳答案有什么区别? 您的结果中是否需要空字符串? 比如什么? 输入示例:string[] myString =" hello";除非 "Trim()" 结果 -> "", "hello" 嗯。谢谢你的回答。以上是关于如何将字符串数组拆分为新的字符串数组并删除重复项的主要内容,如果未能解决你的问题,请参考以下文章
String中的toCharArray:将此字符串转换为新的字符数组,并统计次数