第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當(dāng)我得到 CompareTo() 時,如何按順序在排序的 C# List 中插入多個對象

當(dāng)我得到 CompareTo() 時,如何按順序在排序的 C# List 中插入多個對象

C#
慕妹3146593 2022-11-21 22:04:58
我的家庭作業(yè)任務(wù):我在 C# 中獲得了通用列表,我根據(jù)實現(xiàn)時間對其進(jìn)行了List.Sort排序CompareTo()。我有另一個相同結(jié)構(gòu)對象的列表,我需要將它們插入到我的第一個排序列表中,而不是將它們添加到列表的末尾,然后再次List.Sort插入,而是立即插入到已排序的列表中,并在插入后對列表進(jìn)行排序。我該怎么做?長話短說:我不能使用 SortedList,只能使用通用列表,而且我不能將我的項目添加到 MyList1 的末尾,然后再添加到 MyList1.Sort() 我的列表如下所示:List<MyClass> MyList1 = new List<MyClass>():List<MyClass> MyList2 = new List<MyClass>()MyList1.Sort();我需要按照排序的相同順序MyList2插入到的項目。MyList1我的CompareTo()方法,它按兩個屬性排序:public int CompareTo(MyClass next){    int pos = String.Compare(this.name, next.name, StringComparison.CurrentCulture);    if ((this.price < next.price) || ((this.price== next.price)          && (pos > 0)))    {        return 1;    }    else     {        return - 1;    }}我想出了它應(yīng)該是什么樣子,這很好用:static void Inserting(List<MyClass> List1,           List<MyClass> List2)        {            foreach (var item in List2)            {                var i = 0;                while (i < List1.Count && item.CompareTo(List1[i]) > 0)                    i++;                List1.Insert(i, item);            }        }
查看完整描述

2 回答

?
達(dá)令說

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 將始終在這里排序。


查看完整回答
反對 回復(fù) 2022-11-21
?
慕村225694

TA貢獻(xiàn)1880條經(jīng)驗 獲得超4個贊

如果要將其插入正確的位置,您有以下三種選擇:

  1. 找到正確的位置,然后Insert它在那里

  2. 使用預(yù)先排序的列表,例如SortedList<TKey,TValue>or SortedSet<T>(取決于您的需要)并添加(注意:SortedList<TKey,TValue>需要唯一鍵;SortedSet<T>應(yīng)用唯一值)

  3. 只是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>


查看完整回答
反對 回復(fù) 2022-11-21
  • 2 回答
  • 0 關(guān)注
  • 135 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號