我可以对 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;}
}
我有 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;}
}