我有2个列表,对是什么:
List<int> timeStamp = new List<int>();
List<string> ownerStamp = new List<string>();
例如: timeStamp'元素:1,10,32 ......
ownerStamp'元素:John,Dave,Maria ......
对是:John-1;戴夫-10;玛利亚-32 ...
我必须订购时间戳列表的元素,但我必须保持上下文!我该怎么做?手动?或者通过工厂订购smthng smart?
答案 0 :(得分:2)
Array.Sort()方法存在重载,允许您使用其他数组项作为键对一个数组进行排序。您可以将列表转换为数组,然后对它们进行排序,然后转换回来:
List<int> timeStamp = new List<int>();
List<string> ownerStamp = new List<string>();
int[] timeStampArray = timeStamp.ToArray();
string[] ownerStampArray = ownerStamp.ToArray();
Array.Sort(timeStampArray, ownerStampArray);
timeStamp = new List<int>(timeStampArray);
ownerStamp = new List<string>(ownerStampArray);
答案 1 :(得分:1)
你最好制作一个包含所有者和时间戳的容器对象,并使其具有可比性:
class Entry : IComparable<Entry> {
public int TimeStamp { get; set; }
public string Owner { get; set; }
public Entry(int timeStamp, string owner) {
this.TimeStamp = timeStamp;
this.Owner = owner;
}
public int CompareTo(Entry other) {
return this.TimeStamp.CompareTo(other.TimeStamp);
}
}
然后,您可以列出这些内容并使用List<T>
Sort()
method对其进行排序。
要访问时间戳和所有者,只需访问TimeStamp
的{{1}}和Owner
字段。
通常,如果您希望数据属于一起,那么在对象或结构中明确地将它们组合在一起是个好主意;然后分组将自动发生,而无需特别注意保持分组。
答案 2 :(得分:1)
您的问题没有准确指出您期望的输出,但以下内容将为您提供一个有序的Tuple对象集合,其第一项是时间戳,第二项是所有者。
timeStamp.Zip(ownerStamp, (i,s) => Tuple.Create(i,s)).OrderBy(t => t.Item1)
答案 3 :(得分:0)
最好将这些对组合成一个'SortedDictionary',它会自动为你排序,或者为timeStamp
和ownerStamp
创建一个元组列表,然后对这些元素进行排序在基于timeStamp
键的元组列表中。
答案 4 :(得分:0)
排序后的字典可能会有所帮助。