将两个列表一起排序为一个?

我有两个List,我通过索引访问(例如Name[10]Date[10] )。 它们紧密相关,因此Name[10]Date[10]相关,反之亦然。

这种设计运作良好,但现在我需要对它们进行排序。 我可以单独对它们进行排序,但显然会消除两个列表之间的关系并使它们变得毫无价值。

我想过使用Dictionary但似乎我只能通过Key访问它(这也是不可行的)。 基本上我需要三个东西,两个值和一个索引,我可以通过数字迭代(不是foreach )。

有人可以帮忙吗? 看来我需要改变数据结构或者解决如何将两个不同的List排序在一起……

 public class Results { public List Name { get; set; } public List Date{ get; set; } } for (int x = 0; x < results; x++) { zN = results.Name[X]; zD = results.Date[x]; } 

听起来你正在反对做一个涉及一些前期工作的明显解决方案:创建一个类型来封装名称/日期对。

绝对是你应该做的。 然后你可以有一个列表,按名称或日期或任何你想要的方式对其进行排序,你永远不必担心这两个列表不同步等。

如果您的Results类除了包含这两个列表之外没有做任何事情,您实际上最终可以得到相同数量的类型 – 您可以完全抛弃Results ,而支持List ,其中Result具有名称和日期。

使用带有一组键和一组值的Array.Sort重载,它正是你想要的。 (此方法自.NET 2.0起可用。)

帮自己一个忙,把两件事放在一起:

 public class NameAndDate { public string Name { get; set; } public DateTime Date { get; set; } } 

然后将它们保存在一个列表中( List ):

如果要按名称排序,请将IComparer实现添加到NameAndDate ,然后只需在列表中调用Sort()

如果要继续访问“名称”和“日期”,请向“结果”添加访问者方法,例如

 public string GetName(int index) { return list[i].Name; } 
 List NameDateList {get; set; } 

是一种简单的方法来实现您想要的,但为了清楚起见,您可能最好自定义类型来容纳它们,例如:

 public class NameDate { public string Name { get; set; } public DateTime Date{ get; set; } } 

然后你可以使用:

 List NameDateList {get; set; } 

您可以创建一个自定义类型来保存值,或者如果您只需要在单个方法的范围内使用它,则可以使用匿名类型,如下所示。

 var namesAndDates = MyNames .Select((name, i) => new {name, date = MyDates[i]}); 

从这里开始,这两个值不再松散地联系在一起。 现在你可以对它们进行排序

 var sortedNamesAndDates = namesAndDates.OrderBy(a => a.date); 

或者其他任何你需要做的事情。

使用两个属性创建一个名为“Result”的类

 public class Result { public string Name {set;get;} public DateTime Date { set;get;} } 

现在您可以创建此类的List

 List objListResult=new List(); 

现在,在您的情况下,如果您愿意,您可以阅读您的不同列表的内容并将其放入我们的新列表。 (这只是你的情况,如果你真的想将数据从旧列表移动到我们的新列表。如果可能的话,你可以更新你将数据加载到两个List的代码(这是正确的方法),这样它就会将数据加载到我们新的类型结果列表中,并避免此移植代码将数据移动到新列表。

  for(int i=0;i 

您可以像这样访问新列表中的项目

  objListResult[2].Date 

将为您提供列表中第二个对象的存储日期

  objListResult[2].Name 

将为您提供列表中第二个对象的存储名称

您可以使用带有键名的字典,并使用值Date

你可以轻松地将它们分类