2

私は2つのリストを持っています:

student = new list<string>() {"Bob" , "Alice" , "Roger" , "Oscar"};

Marks = new list<int>() {80,95,70,85};

Student を Marks で最速のスタイルでソートしたいのですが、予想される出力は次のようになります。

Student = {"アリス","オスカー","ボブ","ロジャー"}

リストメソッドの下に、目標と同じ、list.sortまたはlist.orderby目標を達成するためのコマンドはありますか?

4

3 に答える 3

10

2 つの配列を使用しないでください。

最良の方法は、クラスを使用してデータのペアを格納することです。

public class Student
{
  public string Name { get; set; }
  public int Mark { get; set; }
}

Student オブジェクトの配列を取得したら、

List<Student> students = new List<Student>();
students.Add(...);

次に、名前をマークと一緒に並べ替えることができます

var sortedStudents = students.OrderBy(s => s.Mark).ToList();
于 2013-05-25T14:39:14.893 に答える
2

タプルと一緒に Zip 関数を使用できます。

student.Zip(Marks, (s, n) => new Tuple<string, int>(s,n)).Sort(t => t.Item2).Select(t => t.Item1);
于 2013-05-25T14:45:04.943 に答える
1

Pair the name and score using the Tuple class.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<Tuple<string, int>> list = new List<Tuple<string, int>>();
        list.Add(new Tuple<string, int>("Bob",80 ));
        list.Add(new Tuple<string, int>("Alice", 95));
        list.Add(new Tuple<string, int>("Roger", 70));
        list.Add(new Tuple<string, int>("Oscar", 85));

        // Use Sort method with Comparison delegate.
        // ... Has two parameters; return comparison of Item2 on each.
        list.Sort((a, b) => a.Item2.CompareTo(b.Item2));

        foreach (var element in list)
        {
            Console.WriteLine(element);
        }
    }
}
于 2013-05-25T14:45:31.560 に答える