【问题标题】:Sorting a list based on the contents of another list根据另一个列表的内容对列表进行排序
【发布时间】:2014-09-04 23:54:59
【问题描述】:

我有一个包含整数列表的列表和另一个包含一个同时包含整数和字符串的类的列表。

我要做的是按字母顺序对列表进行排序,将第一个列表中存在的条目放在首位。这是我的代码和预期输出:

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main()
    {
        var myList = new List<int>();
        myList.Add(5);
        myList.Add(15);

        var myclasses = new List<MyClass>();
        myclasses.Add(new MyClass {MyId = 8, MyString = "Entry1"});
        myclasses.Add(new MyClass {MyId = 12, MyString = "Entry2"});
        myclasses.Add(new MyClass {MyId = 1, MyString = "Entry3"});
        myclasses.Add(new MyClass {MyId = 15, MyString = "Entry4"});
        myclasses.Add(new MyClass {MyId = 9, MyString = "Entry5"});
        myclasses.Add(new MyClass {MyId = 5, MyString = "Entry6"});

        foreach (MyClass c in myclasses.OrderBy(z => myList.Contains(z.MyId)).ThenBy(z => z.MyString )) {
            Console.WriteLine("{0} ==> {1}", c.MyId, c.MyString);
        }

        // I'm expecting this output:
        //
        // 15 ==> Entry4
        // 5 ==> Entry6
        // 8 ==> Entry1
        // 12 ==> Entry2
        // 1 ==> Entry3
        // 9 ==> Entry5
    }

    public class MyClass {
        public int MyId { get; set; }
        public string MyString { get; set; }
    }
}

从我的预期输出中可以看出,我希望 Entry6Entry4 首先出现,因为它们出现在第一个列表中。然后我只想要一个按字母顺序排列的列表。我认为我的 LINQ 语句是正确的,但它没有给我正确的结果。任何帮助将不胜感激。

【问题讨论】:

    标签: c# .net linq sorting


    【解决方案1】:

    只需反转myList.Contains 条件:

    foreach (MyClass c in myclasses.OrderBy(z => !myList.Contains(z.MyId)).ThenBy(z => z.MyString )) {
           Console.WriteLine("{0} ==> {1}", c.MyId, c.MyString);
    }
    

    我相信这是因为true 被视为1false0

    【讨论】:

      【解决方案2】:

      使用这个:

      myclasses.OrderBy(z => !myList.Contains(z.MyId)).ThenBy(z => z.MyString)
      

      【讨论】:

        猜你喜欢
        • 2018-11-15
        • 1970-01-01
        • 2023-04-01
        • 2021-05-02
        • 2011-03-22
        • 1970-01-01
        • 2012-08-27
        • 1970-01-01
        相关资源
        最近更新 更多