C#在数组中没有重复

0 c#

我有一个配有大量句子的文件.我需要用该文件中的单词创建一个字典.到目前为止,我已经将单词分开并使用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;
}
Run Code Online (Sandbox Code Playgroud)
  • 我怎么能更整洁呢?
  • 我不喜欢这种方法因为使用Clone()初始化并且长度太大.

Duc*_*lan 6

你也可以在LINQ 的功能旁边使用HashSet.Distinct():

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

public static string[] NoDuplicate(string[] array)
{
    string[] result = new HashSet<string>(array).ToArray();
    return result;
}
Run Code Online (Sandbox Code Playgroud)

如果要消除不区分大小写的副本,可以传递这样的IEqualityComparer参数:

使用HashSet:

public static string[] NoDuplicate(string[] array)
{
    string[] result = new HashSet<string>(array, StringComparer.OrdinalIgnoreCase)
                         .ToArray();
    return result;
}
Run Code Online (Sandbox Code Playgroud)

使用LINQ的Distict功能:

public static string[] NoDuplicate(string[] array)
{
    string[] result = array.Distinct(StringComparer.OrdinalIgnoreCase)
                     .ToArray();
    return result;
}
Run Code Online (Sandbox Code Playgroud)

  • 这太棒了 (2认同)

小智 5

试试这个:

private static string[] NoDuplicate(string[] inputArray)
{
    var result = inputArray.Distinct().ToArray();
    return result;
}
Run Code Online (Sandbox Code Playgroud)