0

2 つのリストがあります。ペアとは次のとおりです。

List<int> timeStamp = new List<int>();
List<string> ownerStamp = new List<string>();

例: timeStamp' 要素: 1、10、32 ...

ownerStamp の要素: ジョン、デイブ、マリア ...

ペアは次のとおりです。デイブ-10; マリア-32...

タイムスタンプ リストの要素を並べ替える必要がありますが、コンテキストを保持する必要があります。どうすればできますか?手動?それとも、工場発注でスマートですか?

4

5 に答える 5

2

Array.Sort() メソッドのオーバーロードがあり、他の配列項目をキーとして使用して 1 つの配列を並べ替えることができます。リストを配列に変換し、並べ替えてから元に戻すことができます。

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);
于 2012-12-09T12:07:21.343 に答える
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()メソッドを使用して並べ替えることができます。

タイムスタンプと所有者にアクセスするには、のとフィールドにアクセスするTimeStampだけOwnerですEntry

一般に、データを一緒に所属させたい場合は、オブジェクトまたは構造内でデータを明示的にグループ化することをお勧めします。そうすれば、グループ化を維持するために特別な注意を払う必要なしに、グループ化が自動的に行われます。

于 2012-12-09T12:05:40.107 に答える
1

あなたの質問はあなたが期待している出力を正確に指定していませんが、以下はあなたにタプルオブジェクトのソートされたコレクションを与えます、その最初のアイテムはタイムスタンプであり、2番目のアイテムは所有者です。

timeStamp.Zip(ownerStamp, (i,s) => Tuple.Create(i,s)).OrderBy(t => t.Item1)
于 2012-12-09T12:06:34.540 に答える
0

ペアを「SortedDictionary」にまとめると、ペアが自動的に並べ替えられるか、timeStampとのタプルのリストが作成され、キーownerStampに基づいてタプルリストの要素が並べ替えられる場合に最適です。timeStamp

于 2012-12-09T12:03:13.570 に答える
0

ソートされた辞書が役立つ場合があります。

于 2012-12-09T13:23:45.040 に答える