C# 如果对x字符串的测试必须是唯一的-一种更有效的方法?

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

我有许多字符串需要测试,如果它们都是唯一的。如果其中一个等于另一个,则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 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));