C#在数组中没有重复

时间:2018-05-10 04:27:48

标签: c#

我有一个包含大量句子的文件。我需要用该文件中的单词创建一个字典。到目前为止,我已经将这些单词分开并使用 Split() Sort()方法对它们进行排序。我的问题是制作一个没有重复单词的列表。我怎么能这样做?

$locations = Locations::whereHas('landmarks', function($query) use ($landmarks) { 
    $query->where('landmarks', 'LIKE', '%' . $landmarks . '%'); 
})->get(); 
  • 我怎么能更整洁呢?
  • 我不喜欢那种方法,因为是 使用Clone()初始化,长度太大。

4 个答案:

答案 0 :(得分:6)

您还可以使用LINQ的.Distinct()功能旁边的HashSet

  

<强> 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&#39; Distict功能

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

答案 1 :(得分:5)

试试这个:

private static string[] NoDuplicate(string[] inputArray)
{
    var result = inputArray.Distinct().ToArray();
    return result;
}

答案 2 :(得分:0)

而不是字典创建一个单词。 如果重复,在每个级别保持相同的字数。这样你可以避免使用太多的空间,搜索任何单词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')];
    }
}

答案 3 :(得分:-2)

您可以尝试以下解决方案:

private static string[] NoDuplicate(string[] inputArray)
{
     List<string> stringList = new List<string>();
     foreach (string s in inputArray)
     {
           if (!stringList.Contains(s))
           {
                stringList.Add(s);
           }
     }
     return stringList.ToArray();
}