根据另一个List <int> </int> </string>对List <string>进行排序

时间:2013-05-25 14:34:35

标签: c# list sorting

我有两个列表:

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

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

我希望Marks以最快的方式排序学生,预期的输出必须是:

  

学生= {“爱丽丝”,“奥斯卡”,“鲍勃”,“罗杰”}

列表方法下是否有与list.sortlist.orderby相同的命令来实现目标?

3 个答案:

答案 0 :(得分:10)

不要使用2个阵列。

您最好的方法是使用类来存储数据对。

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

获得一个学生对象数组

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

然后您可以将名称与标记

一起排序
var sortedStudents = students.OrderBy(s => s.Mark).ToList();

答案 1 :(得分:2)

您可以将Zip功能与Tuples一起使用。

student.Zip(Marks, (s, n) => new Tuple<string, int>(s,n)).Sort(t => t.Item2).Select(t => t.Item1);

答案 2 :(得分:1)

使用Tuple课程对名称和分数进行配对。

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);
        }
    }
}