C# 不重复的组合
我有收藏C# 不重复的组合,c#,algorithm,combinations,C#,Algorithm,Combinations,我有收藏列表 如何在不重复的情况下将此集合中的每个项目与rest进行比较 例: 迭代: 这辆车是奥迪,第二辆车是宝马 bool IsSimilar(Car secondCar) { if(this.Name==secondCar.Name) return true; return false; } 这是不允许的: n迭代 这辆车是宝马,第二辆车是奥迪 bool IsSimilar(Car secondCar) { if(this.Name==secondCar.Name) retu
列表
如何在不重复的情况下将此集合中的每个项目与rest进行比较
例:
bool IsSimilar(Car secondCar)
{
if(this.Name==secondCar.Name) return true;
return false;
}
这是不允许的:
n迭代
这辆车是宝马,第二辆车是奥迪
bool IsSimilar(Car secondCar)
{
if(this.Name==secondCar.Name) return true;
return false;
}
更清楚:
List<Car> car=new List<Car>();
List<Pair> pairs=new List<Pair>();
pairs.Cars=new List<Car>();
foreach(Car car in cars)
{
foreach(Car secondCar in cars)
{
if(secondCar!=car)
{
if(car.Name==secondCar.name && car.Owner==secondCar.Owner)
{
Pair pair=new Pair();
pair.Cars.Add(car);
pair.Cars.Add(secondCar);
pairs.Add(pair);
}
}
}
}
List car=new List();
列表对=新列表();
pairs.Cars=新列表();
foreach(汽车中的汽车)
{
foreach(汽车中的第二辆汽车)
{
如果(第二辆车!=车)
{
if(car.Name==secondCar.Name&&car.Owner==secondCar.Owner)
{
Pair Pair=新的Pair();
pair.Cars.Add(car);
pair.Cars.Add(secondCar);
配对。添加(配对);
}
}
}
}
我只是不想两次比较车(你们知道第一次迭代比较车1和车2,下一次车2是基本车,车1是第二辆车)
对不起,我的英语糟糕透了这里有一个从列表中获取唯一组合的简单方法
for(int i = 0; i < list.Count; i++)
for(int j = i + 1; j < list.Count; j++)
// perform operation
for(int i=0;i
不要在集合上循环,而是在索引上循环
for (i = 0; i < length(cars); i++) {
for (j = i+1; j < length(cars); j++) {
<do comparison>
}
}
for(i=0;i
我将重复其他人说过的话,并向他们解释你的评论(这是错误的):
for(int i=0;i
你对这项技术的评论是“不,不是这个。看:i=0,j=1我们有[…],i=1,j=0我们有[…]”
您错过的是
j
总是从i+1
开始。因此,决不会像你提到的那样,i=1和j=0
不知道你想要什么。你能解释一下你所说的“比较”是什么意思吗(检查是否相等、排序等)。输出应该是什么样的?作为比较的输出,您希望得到什么?不清楚您想要做什么。您正在尝试创建一个没有重复的排序列表吗?-如果是这样,您是否尝试过使用LINQ?我想搜索具有相同属性的项目。如果我有100个项目,我想使用这样的方法:foreach(Car-Car-in-cars){foreach(Car-secondCar-in-cars){If(secondCar!=Car){car1.IsSimilar(car2);}}}}}}但是没有重复,所以如果我在比较car1和car2之前我不想再做一次。方法IsSimilar不会返回bool,但可以这样做:List pairs=new List(Pair)可能将其命名为组合不是个好主意…它引入了混乱…而且-如果Car1与Car3相似,那么它是否一定意味着Car3与Car1相似?不,不是这样。看:i=0,j=1,我们有car1和car2。i=1,j=0我们有车2和车1。我不想重复同样的工作(检查对象的属性,因为它已经在上一次迭代中完成了)@phenevo:当I=1时,j将从2开始,永远不会是0。这就是重点。不,不是这个。看:i=0,j=1,我们有car1和car2。i=1,j=0我们有车2和车1。我不想重复同样的工作(检查对象的属性,因为它在上一次迭代中已经完成了),当I=1时,j将从I+1=1+1=2开始,所以您不会两次比较。当i=1时,j永远不会是0。@phenevo,用sirlark的方法,你永远不会有i=1和j=0,因为j的起始值总是比i的当前值高。是的,对不起(咖啡昨天结束:)
for (int i = 0; i < N; i++) {
for (int j = i+1; j < N; j++) {
<do something>
}
}