4

価値があるのは、2つの独立したリストではなく複数のプロパティを持つ同じリストで作業していること、およびアイテムの一致ではなくテキストを含む比較を含まないことを除いて、関連する以下の投稿をしばらく見ていたことです。

object.variable が他の object.variable2 に少なくとも 1 回存在する List<object> からすべてのオブジェクトを削除する方法は?

「果物」と呼ばれる果物でいっぱいの文字列リストがあります

Apple
Orange
Banana

また、いくつかの果物 (およびその他のその他の情報) とその他の製品でいっぱいの製品と呼ばれる文字列リストもあります。

ShoeFromNike
ApplePie
OrangeDrink

2 番目のリストからすべてのアイテムを削除する必要があります。各行には、フルーツ リストにリストされているアイテムが含まれていません。

最終結果は、以下のみを含む製品リストになります。

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]);
        }

私の最高のラムダアプローチ:

        products.RemoveAll(p => !p.Contains(fruits.Select(f=> f)));
4

3 に答える 3

3

私は個人的に .Any() を使用するのが好きです。

    products.RemoveAll(p => !fruits.Any(f => f.IndexOf(p, StringComparison.CurrentCultureIgnoreCase) >= 0));
于 2013-10-14T17:18:34.193 に答える