C# 如果对x字符串的测试必须是唯一的-一种更有效的方法?
我有许多字符串需要测试,如果它们都是唯一的。如果其中一个等于另一个,则If测试必须失败。在本例中,我将使用4个字符串,但实际上它远不止此C# 如果对x字符串的测试必须是唯一的-一种更有效的方法?,c#,if-statement,comparison,compare,string-comparison,C#,If Statement,Comparison,Compare,String Comparison,我有许多字符串需要测试,如果它们都是唯一的。如果其中一个等于另一个,则If测试必须失败。在本例中,我将使用4个字符串,但实际上它远不止此 string a = "a"; string b = "b"; string c = "c"; string d = "d"; “解决这个问题”的一种方法是对每一个问题进行比较。像这样: if (a == b || a == c || a == d || b == c || b == d || c == d) { throw new Excep
string a = "a";
string b = "b";
string c = "c";
string d = "d";
“解决这个问题”的一种方法是对每一个问题进行比较。像这样:
if (a == b || a == c || a == d || b == c || b == d || c == d)
{
throw new Exception("None of the strings can be equal");
}
然而,我正在寻找一种更有效/更聪明的方法
有人有什么建议吗?私人bool UniqueCheck(params string[]items)
private bool UniqueCheck(params string[] items)
{
return UniqueCheck((IEnumerable<string>)items);
}
private bool UniqueCheck(IEnumerable<string> items)
{
var hs = new HashSet<string>();
foreach (var item in items)
if (!hs.Add(item))
return false;
return true;
}
{
返回唯一支票((IEnumerable)项);
}
私人布尔唯一支票(IEnumerable items)
{
var hs=新的HashSet();
foreach(项目中的var项目)
如果(!hs.添加(项目))
返回false;
返回true;
}
像其他人建议的那样,你可以创建一个HashSet,我可以创建一个helper方法
static bool AreStringsUnique(params string[] toCompare)
{
var hashTable = new HashSet<string>(toCompare);
return hashTable.Count == toCompare.Length;
}
静态bool arestringsinque(参数字符串[]到compare)
{
var hashTable=新HashSet(toCompare);
返回hashTable.Count==toCompare.Length;
}
然后,您可以使用任意数量的字符串调用它,并让编译器为您生成数组。最简单的方法就是当您看到这一点时在心里所做的方法-将所有内容按顺序排列并检查重复项 首先,将其全部排序。如果是“超过4条”字串,请考虑把它放进GEO中的集合。
var strings = new string[] { "a", "b", "c", "d" };
一旦有了字符串[],就可以对其执行操作,因为字符串[]继承自IEnumerable
这将是我的第一个实现,只需过滤掉重复项并查看列表是否缩小
if(strings.Distinct().Count() < strings.Count)
throw new Exception("None of the strings can be equal");
而且,通过一些调整,这甚至可以告诉你哪个键被复制了
var groupedStrings = string.GroupBy(s => s);
var errorGroup = groupedStrings.FirstOrDefault(g => g.Count() > 1);
if(errorGroup != null)
throw new Exception(string.Format("Duplicate string \"{0}\" detected. None of the strings can be equal!", errorGroup.Key));
这些字符串的形式很重要。它真的是独立的虚荣吗?请准确点。
var groupedStrings = string.GroupBy(s => s);
var errorGroup = groupedStrings.FirstOrDefault(g => g.Count() > 1);
if(errorGroup != null)
throw new Exception(string.Format("Duplicate string \"{0}\" detected. None of the strings can be equal!", errorGroup.Key));