【问题标题】: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", "/&&/&", "_____"} ;

【问题讨论】:

    标签: c# arrays split


    【解决方案1】:

    使用SelectManyDistinct

    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"}
      • 嗯。谢谢你的回答。
      猜你喜欢
      • 2013-08-19
      • 1970-01-01
      • 2016-03-22
      • 2016-04-01
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      相关资源
      最近更新 更多