根据1个列表的元素排序2个列表的元素

时间:2012-12-09 12:00:09

标签: c#

我有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?

5 个答案:

答案 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',它会自动为你排序,或者为timeStampownerStamp创建一个元组列表,然后对这些元素进行排序在基于timeStamp键的元组列表中。

答案 4 :(得分:0)

排序后的字典可能会有所帮助。