3

すべての属性の ID (list1) を含む Arraylist があります。これで、最初の ArrayList (list1) から削除する必要がある別の属性 ID (list2) のセットができました。

私はLINQ開発者として初心者段階にあるので、適切なコードスニペットを提案してください

Arraylist attributeIDs; // which contains Ids
int[] ids = { 1, 2, 3, 4 };
var id = ids.Select(s => s);
var sam = attributeIDs.Cast<IEnumerable>().Where(s => id.Contains(Convert.ToInt32(s)));
Arraylist filterAttributDs = Cast<Arraylist>sam;

上記のコードの後、出力 Arraylist を別のメソッドに転送する必要があるため、Arraylist のみの出力が必要です よろしくお願いします!

4

4 に答える 4

3

メソッドを試す

var sam = attributeIDs.Cast<IEnumerable>().Where(s => id.Contains(Convert.ToInt32(s)));
ArrayList myArrayList = new ArrayList(sam );

編集

int[] ids = { 1, 2, 3, 4 };
//var id = ids.Select(s => s);
List<int> id = ids.OfType<int>().ToList();
var list = attributeIDs.Cast<int>().ToList();
//or try 
//List<int> list = new List<int>(arrayList.ToArray(typeof(int)));
var sam = list.Where(s => id.Contains(s));
//if you want to remove items than , !Contains() rather an Contains()
// var sam = list.Where(s => !id.Contains(s); 
//also try out Intersect or Except instead of this as jon suggestion in comment 
//var sam= attributeIDs.Except(id); for diffence between list
//var sam= attributeIDs.Intersect(id); for common in list


ArrayList myArrayList = new ArrayList(sam );

すべてを組み合わせる

これをチェックしてください: LINQ to SQL in と not in

于 2013-01-03T07:03:07.587 に答える
1
new Arraylist((from id in attributeIDs where !ids.Contains(id) select id).ToList())

ただし、Jon が述べたように、単純な配列または汎用コレクションを使用することを検討する必要があります。また、上記のクエリは O(n*m) で実行されることに注意してください。ここで、n は元のリスト内のアイテムの数、m は削除しようとしているリスト内の要素の数です。パフォーマンスを向上させるために、HashSet の使用を検討してから、ここで差集合操作を使用することを検討してください。

于 2013-01-03T07:04:18.717 に答える
1

あなたの例に微調整:

ArrayList attributeIDs = new ArrayList(){ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] ids = { 1, 2, 3, 4 };
var sam = attributeIDs.Cast<int>().Intersect(ids);

いくつかのメモ:

  • Castは、コレクションの型ではなく、基になる項目の型をキャストします。

  • foo = setOfThings.Select(a => a) <==> setOfThings

  • Intersect「両方のセットに表示される要素のみを選択する」ことを意味します

(他の場所で述べたように、Intersect は大規模なデータ セットには最適ではありません。HashSet などの適切な構造を使用することを検討してください)

于 2013-01-03T07:05:18.040 に答える
0

あなたの問題の解決策は次のとおりです。

ArrayList firstList = new ArrayList(new int[]{ 1, 2, 3, 7, 8, 9 });

ArrayList secondList =new ArrayList(new int[] { 1, 3 });

var result = from c in firstList.ToArray() where !(from n in secondList.ToArray() select n).Contains(c) select c;

foreach (var temp in result) Console.WriteLine(temp);

上記の OutPut は次のとおりです。2 7 8 9つまり、secondList の項目が firstList から削除されます。結果は、取得する必要がある ArrayList になります。

于 2013-01-03T07:45:53.147 に答える