我可以对 guids 列表进行排序并进行二进制搜索吗?

Can i sort guids list and make binary search?

我有 class Value:

class Value
{
   public Guid Guid {get;set;}
   public double Val {get;set;}
}

那么,如果我有两个 Value 的大列表,我该如何排序然后使用 BinarySearch?

我可以吗? 谢谢!

List<Value> valList = new List<Value>(); 成为 Value 的列表,然后您可以根据 属性 Val 对它们进行排序,如下所示:

 valList = valList.OrderBy(x => x.Val).ToList();   

总结:

如果您有一个 Value 的列表,并且您想根据 Guid 对您的列表进行排序,您有两种可能性。您可以按所需的 属性 明确对列表进行排序,或者实现 IComparable<Value>

var orderedList = list.OrderBy(i => i.Guid);

另一种情况是:

public class Value: IComparable<Value>
{
    public int CompareTo(Value other)
    {
        if(other == null)
        {
            return 1;
        }
        return Guid.CompareTo(other.Guid);
    }
    //[...]
}

那么你可以排序:

var orderedList = list.OrderBy(i => i).ToList();

然后当你想执行二进制搜索时,只需应用以下行:

int index = orderedList.BinarySearch(new Value{ Guid = guidToSearchFor });

示例:

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

class Program
{
    static void Main()
    {
        List<Value> list = new List<Value>
        {
            new Value() { Guid = Guid.NewGuid() },
            new Value() { Guid = Guid.NewGuid() },
            new Value() { Guid = Guid.NewGuid() },
            new Value() { Guid = Guid.NewGuid() }
        };
    
        var orderedList = list.OrderBy(i => i).ToList();
        int index = orderedList.BinarySearch(new Value{ Guid = list[2].Guid });
        Console.WriteLine(index);
    }
}

public class Value: IComparable<Value>
{
    public int CompareTo(Value other)
    {
        if(other == null)
        {
            return 1;
        }
        return Guid.CompareTo(other.Guid);
    }
    
    public Guid Guid {get;set;}
    public double Val {get;set;}
}