對於什麼是值得的,我花了一段時間看看下面的帖子,這是相關的,除了它是在多個屬性而不是兩個相同的列表上工作獨立的名單,也不涉及文本包含比較而不是項目匹配。從列表中刪除所有行,其中每行不包含任何來自另一個列表的項目
我有一個字符串列表十足的水果被稱爲「水果」
Apple
Orange
Banana
我也有一個字符串列表,名爲產品,盡是些水果(加上其他雜項信息)和一些其他產品也是如此。
ShoeFromNike
ApplePie
OrangeDrink
我需要從第二列表,其中每個單獨的行不字符串包含任何的水果清單所列項目的刪除所有項目。
的最終結果將是隻包含產品列表:
ApplePie
OrangeDrink
我最好的迭代方法:
//this fails becaucse as I remove items the indexes change and I remove the wrong items (I do realize I could reverse this logic and if it meets the criteria ADD it to a new list and i'm sure there's a better way.)
for (int i = 0; i < products.Count(); i++)
{
bool foundMatch = false;
foreach (string fruit in fruits)
if (products[i].Contains(fruit))
foundMatch = true;
if (foundMatch == false)
products.Remove(products[i]);
}
我最好的LAMBDA方法:
products.RemoveAll(p => !p.Contains(fruits.Select(f=> f)));
是的,我認爲有一個更好的選擇,+1。應該閱讀'products.RemoveAll(p =>!fruits.Any(f => p.Contains(f)));'以符合OP。 –
我很確定這不會起作用,除非'=='被覆蓋。 –
@Az Za如果產品列表中的項目是Apple Orange,這不僅僅有助於嗎?換句話說,它對於包含沒有幫助。 – Kulingar