我可以对 guid 列表进行排序并进行二叉搜索吗?
本文关键字:搜索 排序 guid 列表 我可以 | 更新日期: 2023-09-27 18:34:52
我有类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;}
}
让List<Value> valList = new List<Value>();
成为您的Value
列表 然后,您可以根据属性Val
对它们进行排序,如下所示:
valList = valList.OrderBy(x => x.Val).ToList();