0

我有收藏List<Car>

如何将此集合中的每个项目与其余项目进行比较而不重复。

前任:

  1. 迭代:

这辆车是奥迪,第二辆车是宝马

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 和汽车 2,下一辆汽车 2 是基础汽车,汽车 1 是第二辆汽车)

对不起我糟糕的英语

4

3 回答 3

4

不要遍历集合,遍历索引

for (i = 0; i < length(cars); i++) {
    for (j = i+1; j < length(cars); j++) {
        <do comparison>
    }
}
于 2010-02-28T14:18:56.817 回答
3

这是从列表中获取唯一组合的简单方法。

for(int i = 0; i < list.Count; i++)
    for(int j = i + 1; j < list.Count; j++)
        // perform operation
于 2010-02-28T14:14:30.290 回答
3

我将重复其他人所说的话并向他们解释您的评论(这是错误的):

for (int i = 0; i < N; i++) {
    for (int j = i+1; j < N; j++) {
        <do something>
    }
}

您对这种技术的评论是“不,不是这个。看:i=0, and j=1 we have [...]. i=1, and j=0 we have [...] ”。

你错过的是j总是从i+1. 所以永远不会i=1 and j=0你提到的那样!

于 2010-02-28T14:31:33.397 回答