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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何避免在多層列表中添加重復(fù)項(xiàng)

如何避免在多層列表中添加重復(fù)項(xiàng)

Go
動(dòng)漫人物 2021-07-15 13:01:15
我有以下類型的名為 ITEMS 的列表public class ABC(    string itemName{get;set;}    int parentID{get;set;}    List<ABC> Child {get;set;}    )因此,如圖Class ABC所示 List ITEMS 可以有, List<ABC> Child而 ThatList<ABC> Child可以有另一個(gè)List<ABC> Child。這是問(wèn)題; 如果我想添加新的項(xiàng)目類型Class ABC以列出項(xiàng)目,我如何確保它不在項(xiàng)目列表或其內(nèi)部子列表中,然后將其添加到項(xiàng)目列表或其任何內(nèi)部子列表中?
查看完整描述

2 回答

?
紅糖糍粑

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊

使用擴(kuò)展功能Flatten:


public static IEnumerable<T> Flatten<T>(this IEnumerable<T> e, Func<T, IEnumerable<T>> flattenFn) => e.SelectMany(c => c.Flatten(flattenFn));

public static IEnumerable<T> Flatten<T>(this T current, Func<T, IEnumerable<T>> childrenFn) {

    var working = new Stack<T>();

    working.Push(current);


    while (working.Count > 0) {

        current = working.Pop();

        yield return current;


        if (childrenFn(current) != null)

            foreach (var child in childrenFn(current))

                working.Push(child);

    }

}

您可以展平您的原件ITEMS List,然后檢查您的新項(xiàng)目是否在其中:


var exists = ITEMS.Flatten(x => x.Child).Select(x => x.itemName).Contains(newItemID);

如果您經(jīng)常這樣做,那么考慮基于散列的結(jié)構(gòu)(例如 a)可能是明智的,Dictionary或者如果您有一個(gè)唯一的項(xiàng)目列表要添加,則從扁平化的項(xiàng)目中創(chuàng)建一個(gè)散列集ITEMS以加快檢查速度。


查看完整回答
反對(duì) 回復(fù) 2021-07-18
?
慕蓋茨4494581

TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個(gè)贊

向類中添加遞歸方法,如下所示:


//using System.Linq;


public class ABC

(

    string itemName{get;set;}

    int parentID{get;set;}

    List<ABC> Child {get;set;}    


    public bool AlreadyContains(ABC abc)

    {

        if (Child.Any( a => a.itemName == abc.itemName )) return true;  //Check children

        return Child.Any( a => a.AlreadyContains(abc) );   //Ask children to check their children too

    }

)

然后你可以用一行代碼檢查:


if (!abc.AlreadyContains(newAbc)) abc.Add(newAbc);

注意:上面的例子假設(shè)當(dāng)它們的 itemNames 相等時(shí) abc 實(shí)例是相等的。當(dāng)然,您可以修改條件,例如abc.Equals(newAbc)您是否已經(jīng)覆蓋了 Equals(),或者abc == newAbc如果您想要引用相等。


查看完整回答
反對(duì) 回復(fù) 2021-07-18
  • 2 回答
  • 0 關(guān)注
  • 201 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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