【问题标题】:Sort lists and reverse them doesn't work排序列表并反转它们不起作用
【发布时间】:2018-07-18 21:51:23
【问题描述】:

我有一些列表我想按一个值排序,然后将它们反转。 两个列表不是按它们自己的值排序,而是按第二个列表的值排序。

List<Sector> tempSectors = Lists.LSectors;
List<Sector> orderedByCTW = new List<Sector>();
List<Sector> orderedByCTM = new List<Sector>();

orderedByCTW = tempSectors;
orderedByCTM = tempSectors;

orderedByCTW.Sort((s1, s2) => s1.CLTW.Count.CompareTo(s2.CLTW.Count));
orderedByCTM.Sort((s1, s2) => s1.CLTM.Count.CompareTo(s2.CLTM.Count));
orderedByCTW.Reverse();
orderedByCTM.Reverse();
Utility.MostValueableSectorTW = orderedByCTW.FirstOrDefault();
Utility.MostValueableSectorTM = orderedByCTM.FirstOrDefault();

orderedByCTW也是按照CTM的值排序的,为什么呢?

【问题讨论】:

标签: c# list sorting


【解决方案1】:

您正在将 tempSectors 分配给您的其他两个变量,orderedByCTM 和 orderedByCTW。

所以它实际上是同一个列表。你以一种方式排序,然后是另一种。然后你反转它,再反转它。

相反,也许制作一个副本。

orderedByCTW = tempSectors.ToList();
orderedByCTM = tempSectors.ToList();

现在您已经获得了相同原始列表的副本,而不仅仅是原始列表。

【讨论】:

  • 考虑一下。我将做一些假设,你可以简单地接受这个例子。你有妈妈和爸爸。你妈妈有丈夫。如果你给你父亲穿一件蓝色衬衫,然后你妈妈给她丈夫穿一件红色衬衫,你会惊讶地看到你父亲穿一件红色衬衫吗?当然不是,因为你爸爸和你妈妈的丈夫不是两个不同的人。这里也是一样。你有两个变量,是的,但它们指的是同一个对象。通过一个变量对对象所做的任何更改都将以相同的方式反映在另一个变量中。
  • 啊,我明白了.. 我认为填写这两个列表并在其中工作会做到这一点,并且不会影响另一个
  • tempSectors 是对存储列表的内存位置的引用。因此,当您分配 orderedByCTW = tempSectors; 时,您现在有了对同一位置的新引用。
  • 所以当我订购orderbyCTW时,我真的订购tempsectors,然后与orderbyCTM影响tempsectors一样......对吗?
猜你喜欢
  • 2018-03-06
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
  • 1970-01-01
相关资源
最近更新 更多