我有收藏List<Car>
。
如何比较此集合中的每个项目与休息而不重复。
例如:
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);
}
}
}
}
我只是不想比较汽车两次(你知道第一次迭代比较汽车1与car2,下一辆car2是基地汽车而car1是第二汽车)
对不起我糟糕的英语
答案 0 :(得分:4)
不要遍历集合,遍历索引
for (i = 0; i < length(cars); i++) {
for (j = i+1; j < length(cars); j++) {
<do comparison>
}
}
答案 1 :(得分:3)
以下是从列表中获取唯一组合的简单方法。
for(int i = 0; i < list.Count; i++)
for(int j = i + 1; j < list.Count; j++)
// perform operation
答案 2 :(得分:3)
我要重复其他人所说的话并向他们解释你的评论(这是错误的):
for (int i = 0; i < N; i++) {
for (int j = i+1; j < N; j++) {
<do something>
}
}
你评论过这个技术“不,不是这个。看:i = 0,j = 1我们有... ... i = 1,j = 0我们有[。 ..] ”。
您错过的是j
始终从i+1
开始。因此,永远就像你提到的那样i=1 and j=0
!