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

本文关键字:搜索 排序 guid 列表 我可以 | 更新日期: 2023-09-27 18:34:52

我有类Value

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

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

我能做到吗?谢谢!

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

总结:

如果您有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;}
}

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

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