我有类 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/