如果没有在每个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个变量,编写比较语句需要永远。
对我而言,它听起来与搜索算法类似,我可以应用与可能应用于排序二进制搜索相同的概念吗?
答案 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