亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

使用 lambda 謂詞比較兩個列表以確定兩個列表是否包含相同的項目

使用 lambda 謂詞比較兩個列表以確定兩個列表是否包含相同的項目

C#
拉莫斯之舞 2022-10-15 14:10:58
如果我的對象列表包含 vb.net 或 C# 中類型列表中的所有類型,我將嘗試返回一個布爾值。我正在努力編寫一個 lambda 表達式來實現這一點。這可以使用 lambda 謂詞來完成嗎?我知道可以通過 for each 循環輕松完成。VB.netPublic Class Widget    Public wobbly As String    Public sprocket As String    Public bearing As StringEnd ClassPublic Sub test()    Dim wList As New List(Of Widget)    wList.Add(New Widget() With {.bearing = "xType", .sprocket = "spring", .wobbly = "99"})    wList.Add(New Widget() With {.bearing = "yType", .sprocket = "sprung", .wobbly = "45"})    wList.Add(New Widget() With {.bearing = "zType", .sprocket = "straight", .wobbly = "17"})    Dim typeList As New List(Of String) From {"xType", "yType", "zType"}    Dim containsAllTypes As Boolean = wList.TrueForAll(Function(a) a.bearing.Equals(typeList.Where(Function(b) b = a.bearing)))    Debug.WriteLine(containsAllTypes.ToString)End SubC#public class Widget{    public string wobbly;    public string sprocket;    public string bearing;}public void test(){    List<Widget> wList = new List<Widget>();    wList.Add(new Widget {        bearing = "xType",        sprocket = "spring",        wobbly = "99"    });    wList.Add(new Widget {        bearing = "yType",        sprocket = "sprung",        wobbly = "45"    });    wList.Add(new Widget {        bearing = "zType",        sprocket = "straight",        wobbly = "17"    });    List<string> typeList = new List<string> {        "xType",        "yType",        "zType"    };    bool containsAllTypes = wList.TrueForAll(a => a.bearing.Equals(typeList.Where(b => b == a.bearing)));    Debug.WriteLine(containsAllTypes.ToString());}編輯,感謝所有快速回答,我看到有幾種方法可以做到這一點,現在對表達式中發生的事情有了更好的理解。
查看完整描述

5 回答

?
當年話下

TA貢獻1890條經驗 獲得超9個贊

嘗試var containsAllTypes = typeList.All(x => wList.Select(x => x.bearing).Contains(x))



查看完整回答
反對 回復 2022-10-15
?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

var containsAll = typeList.All(type => 
    wList.Any(widget => widget.bearing.Equals(type)));

翻譯后,對于所有類型typeList來說,列表中的任何(至少一個)小部件都具有該類型。


查看完整回答
反對 回復 2022-10-15
?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

我相信您想要的是以下內容:

bool containsAllTypes1 = wList.TrueForAll(a => null != typeList.Find(b => b == a.bearing));

您還可以使用 System.Linq,如下所示:

bool containsAllTypes2 = wList.All(a => typeList.Any(b => b == a.bearing));


查看完整回答
反對 回復 2022-10-15
?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

較短的是

containsAllTypes = wList.Where(x => typeList.Contains(x.bearing)).Count() == typeList.Count;

或者

containsAllTypes =  wList.Select(x => x.bearing).Except(typeList).Count() == 0;

或者

containsAllTypes =  wList.Select(x => x.bearing).Intersect(typeList).Count() == typeList.Count;



查看完整回答
反對 回復 2022-10-15
?
森欄

TA貢獻1810條經驗 獲得超5個贊

Dim containsAllTypes As Boolean = wList.All(Function(a) typeList.Any(Function(b) b = a.bearing))

對于 wList 中的每個值,它會檢查 typeList 中的任何值是否與 wList 方位值匹配。


查看完整回答
反對 回復 2022-10-15
  • 5 回答
  • 0 關注
  • 241 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號