2 回答

TA貢獻(xiàn)1821條經(jīng)驗 獲得超6個贊
您可以重寫 List Add 方法并像下面的示例一樣進(jìn)行操作
public class MyClass : IComparable<MyClass>
{
public string Name
{
get;
set;
}
public int Desc
{
get;
set;
}
public int CompareTo(MyClass other)
{
return Name.CompareTo(other.Name);
}
}
public class MyList<T> : List<T> where T : IComparable<T>
{
public new void Add(T item)
{
if (base.Count == 0)
{
base.Add(item);
return;
}
if (base[base.Count - 1].CompareTo(item) <= 0)
{
base.Add(item);
return;
}
if (base[0].CompareTo(item) >= 0)
{
base.Insert(0, item);
return;
}
int index = base.BinarySearch(item);
if (index < 0)
index = ~index;
base.Insert(index, item);
base.Add(item);
}
}
static void Main(string[] args)
{
MyClass myClass = new MyClass();
myClass.Name = "B";
MyClass myClass1 = new MyClass();
myClass1.Name = "A";
MyClass myClass2 = new MyClass();
myClass2.Name = "C";
MyClass myClass3 = new MyClass();
myClass3.Name = "A";
MyList<MyClass>mylist= new MyList<MyClass>();
mylist.Add(myClass);
mylist.Add(myClass1);
mylist.Add(myClass2);
mylist.Add(myClass3);
Console.ReadKey();
}
mylist 將始終在這里排序。

TA貢獻(xiàn)1880條經(jīng)驗 獲得超4個贊
如果要將其插入正確的位置,您有以下三種選擇:
找到正確的位置,然后
Insert
它在那里使用預(yù)先排序的列表,例如
SortedList<TKey,TValue>
orSortedSet<T>
(取決于您的需要)并添加(注意:SortedList<TKey,TValue>
需要唯一鍵;SortedSet<T>
應(yīng)用唯一值)只是
AddRange()
第二個列表,然后Sort()
再次調(diào)用
“1”的問題在于,很難有效地為每個新元素找到正確的位置。如果這是一個數(shù)組,您可以使用Array.BinarySearch
- 如果未找到匹配項,它會返回相應(yīng)索引的按位補碼。您可以手動實現(xiàn)二進(jìn)制搜索List<T>
,但是……這并不好玩。對于 1,您希望使用BinarySearch
列表中存在的那個(感謝@mjwills),請注意未找到匹配項時的返回值是一個按位補碼,告訴您將其插入何處。但是您仍然需要為每個元素執(zhí)行此操作,這會加起來。
就個人而言,我會被SortedSet<T>
或只是在AddRange()
Sort()
List<T>
- 2 回答
- 0 關(guān)注
- 135 瀏覽
添加回答
舉報