我有一个包含大量句子的文件。我需要用该文件中的单词创建一个字典。到目前为止,我已经将这些单词分开并使用 Split()和 Sort()方法对它们进行排序。我的问题是制作一个没有重复单词的列表。我怎么能这样做?
$locations = Locations::whereHas('landmarks', function($query) use ($landmarks) {
$query->where('landmarks', 'LIKE', '%' . $landmarks . '%');
})->get();
答案 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();
}