5

キーが ID で、値が文字列である辞書があります。

これで、各人が CarIds プロパティを持つ人物オブジェクトのリストができました。

IEnumerable<int>

基本的に、オブジェクトのリストをフィルタリングして、プロパティの 1 つが辞書に含まれている項目のみを含めたいと考えています。

例えば。このようなもの:

var dictionary = GetDict();

var people = GetPeople();

 people = people.Where(r => dictionary.ContainsAny(r.CarIds)).ToList();

このようなものは、ContainsKey() に似たことができるが、 ints のリストでチェックできる場所に存在しますか?

4

2 に答える 2

6

はい、リストに対してこれを試すことができます:

people = people.Where(r => list.Intersect(r.CarIds).Count() != 0).ToList();

辞書の場合、これを使用できます。

people = people.Where(r => r.CarIds.Any(n => dictionary.ContainsKey(n))).ToList();
于 2013-04-22T03:19:14.973 に答える
6

あなたの最善の策は、おそらく辞書を拡張することです(おそらくContainsAny()orを持つべきContainsAnyKey()です)。

 public static bool ContainsAny<K, V>(
        this Dictionary<K, V> dict, IEnumerable<K> keys)
 {
     foreach(K key in keys)
         if(dict.ContainsKey(key)) return true;
     return false;
 }

これは次のようにリンクできます。

    public static bool ContainsAny<K, V>(
           this Dictionary<K, V> dict, IEnumerable<K> keys)
    {  return keys.Any(key => dict.ContainsKey(key));  }
于 2013-04-22T03:27:44.010 に答える