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

标签 c# guid binary-search

我有类 Value:

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

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

我可以吗? 谢谢!

最佳答案

总结:

如果你有一个 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;}
}

关于c# - 我可以对 guids 列表进行排序并进行二进制搜索吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35450682/

相关文章:

c# - WPF相当于GDI+的ColorMatrix

C#动态编译器,在内存中编译时获取标准输出

go - 两种算法,我的机器上的结果相同,测试上的结果不同

com - 为什么公共(public)字段和属性可以互换二进制兼容?

python - 我的递归二分搜索程序出了什么问题?

c - 为什么我的二分搜索实现找不到最后一个元素?

c# - 适用于 .NET 的商业兼容许可 SNMP 代理

c# - NLog LogManager.GetLogger(String, Type) 重载的目的是什么

c# - MongoDB C# 驱动程序 : Using Linq to get Guid returns nothing

c# - 由该代码生成的 ID 的安全性如何?