评估n个变量之间的相等性,而不检查每一对

时间:2016-02-23 09:51:16

标签: c#

如果没有在每个N变量之间进行完全比较,不确定这是否可行。

对于int或float,我可以使用简单的数学,来确定数字是否相同;做总和,然后除以元素的数量。

但是如果我想检查3个变量是否包含相同的字符串,我就不能使用这种方法。 var1和var2可能相同,或var3和var1相同,var2和var3也可能相同。据我所知,除非你在EACH变量之间进行比较,否则无法知道该变量的内容是否相同。

我错过了什么或有更简单的方法吗?

3个变量的示例:

string var1 = "hello";
string var2 = "there";
string var3 = "hello";

if (var1 == var2 || var1 == var3 || var2 == var3)
    //got a duplicate
else
    //all are different

想象一下,比较20个变量,编写比较语句需要永远。

对我而言,它听起来与搜索算法类似,我可以应用与可能应用于排序二进制搜索相同的概念吗?

4 个答案:

答案 0 :(得分:4)

将它们放入一个系列中,那么你的生活就会轻松得多。

一种微妙但有效的方法是使用HashSet<>

string[] collection = { var1, var2, var3 };
var set = new HashSet<string>();
bool noDuplicate = collection.All(set.Add);
如果可以添加项目,则

HashSet.Add会返回true,如果该项目尚未添加,则会返回Enumerable.All。所以这个集合不允许重复。 false将停止第一个noDuplicate上的枚举。如果所有内容都是唯一的,则可以将所有内容添加到集合中,true将为display: table;

答案 1 :(得分:1)

你可以尝试这样的事情:

List<string> l = new List<string>() {"a", "b", "a"};
bool isDuplicate = l.GroupBy(i => i).Any(x => x.Count() > 1);

答案 2 :(得分:0)

将所有元素放到列表中,然后比较普通列表元素的计数是否与dinstict相同:

string var1 = "hello";
string var2 = "there";
string var3 = "hello";
string[] values = new [] { var1, var2, var3 };
if (values.Length != values.Distinct.Count()) {
    // Got a duplicate.
} else {
    // All are different.
}

答案 3 :(得分:0)

count

字符串(key)是变量的内容,int值是列表中等于该字符串键的变量数。

    string var1 = "hello";
    string var2 = "there";
    string var3 = "hello";
    string var4 = "hello";
    string var5 = "there";
    string var6 = "hello";
    List<string> strings = new List<string>() { var1, var2, var3,var4,var5,var6 };
    var grouped = strings.GroupBy(x => x);
    Dictionary<string,int> stringAndCount = grouped.ToDictionary(x => x.Key, x => x.Count());

修改

如果您只想知道是否有重复项:

Key: hello, Value: 4
Key: there, Value: 2