为了账号安全,请及时绑定邮箱和手机立即绑定

C# 数组中没有重复项

C# 数组中没有重复项

C#
烙印99 2021-06-03 13:05:30
我有一个包含很多句子的文件。我需要用那个文件中的单词制作一本字典。到目前为止,我已经使用Split()和Sort()方法分离了单词并对其进行了排序。我的问题是制作一个没有重复单词的列表。我怎样才能做到这一点?static int n = 0;public static string[] NoDuplicate(string[] array){    int i;    string[] res = (string[])array.Clone();    for (i = 0; i < array.Length-1; i++)    {       if (array[i + 1] != array[i])            res[n++] = (string)array[i];    }    return res;}我怎样才能做得更整洁?我不喜欢那个方法,因为它是用 Clone() 初始化的,而且长度太大了。
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

除了LINQ的特性之外,您还可以使用HashSet.Distinct():


HashSet: 这是一个优化的集合集合。它有助于消除数组中的重复字符串或元素。它是一个散列其内容的集合。


public static string[] NoDuplicate(string[] array)

{

    string[] result = new HashSet<string>(array).ToArray();

    return result;

}

如果要消除不区分大小写的重复项,可以传递如下IEqualityComparer参数:


使用HashSet:


public static string[] NoDuplicate(string[] array)

{

    string[] result = new HashSet<string>(array, StringComparer.OrdinalIgnoreCase)

                         .ToArray();

    return result;

}

使用 LINQ 的Distict功能:


public static string[] NoDuplicate(string[] array)

{

    string[] result = array.Distinct(StringComparer.OrdinalIgnoreCase)

                     .ToArray();

    return result;

}


查看完整回答
反对 回复 2021-06-05
?
炎炎设计

TA贡献1808条经验 获得超4个赞

试试这个:


private static string[] NoDuplicate(string[] inputArray)

{

    var result = inputArray.Distinct().ToArray();

    return result;

}


查看完整回答
反对 回复 2021-06-05
?
九州编程

TA贡献1785条经验 获得超4个赞

而不是字典创建一个词组。如果重复,则在每个级别保持相同单词的计数。通过这种方式,您可以避免使用太多空间,搜索任何单词 O(log(n)) 会更快,其中 n 是不同单词的数量


public  class WordList {


    private int sameWord        = 0;


    String name                 = "";


    WordList [] child = new WordList[26];


    public  void add( String s, WordList c, int index )

    {

        sameWord++;


        if(index > 0)

        {

            name += ""+s.charAt(index-1);         

        }


        if(index == s.length())

        {

            return;

        }


        if(c.child[s.charAt(index)-'a'] ==null)

        {

            c.child[s.charAt(index)-'a'] = new WordList();

        }

        add(s,c.child[s.charAt(index)-'a'],index+1);

    }


    public static WordList findChar(char c)

    {

        return child[(int)(c-'a')];

    }

}


查看完整回答
反对 回复 2021-06-05
  • 3 回答
  • 0 关注
  • 205 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信