جافا: هل هناك طريقة سهلة أو سريعة إلى حد ما، أو، أو، أو XOR معا مجموعات؟

StackOverflow https://stackoverflow.com/questions/393968

  •  23-08-2019
  •  | 
  •  

سؤال

وهذا هو، إذا كان لدي مجموعتين أو أكثر، وأردت أن أعيد مجموعة جديدة تحتوي على إما:

  1. كل العناصر التي تحتوي كل مجموعة مشتركة (و).
  2. جميع العناصر مجموع كل مجموعة (أو).
  3. كل العناصر الفريدة لكل مجموعة. (XOR).

هل هناك طريقة سهلة أو موجودة مسبقا للقيام بذلك؟

يحرر: هذا هو المصطلحات الخاطئة، أليس كذلك؟

هل كانت مفيدة؟

المحلول

على افتراض 2 مجموعة الكائنات A و B

و (تقاطع مجموعتين)

a.retainAll(b); 

أو (الاتحاد من مجموعتين)

a.addAll(b);

XOR إما لفة حلقة الخاصة بك:

foreach item
if(a.contains(item) and !b.contains(item) ||  (!a.contains(item) and b.contains(item)))
 c.add(item)

أو القيام بذلك:

c.addAll(a); 
c.addAll(b);
a.retainAll(b); //a now has the intersection of a and b
c.removeAll(a); 

انظر تعيين الوثائق وهذه صفحة. وبعد للمزيد من.

نصائح أخرى

يمكنك استعمال ال مجموعات Google مجموعات الفصل التي لديها طرق تقاطع الأساليب () الاتحاد () والتناظرية ().

Sets.intersection(set1, set2);
Sets.union(set1, set2);

SetView view = Sets.intersection(Sets.union(set1, set2), set3);
Set result = view.copyInto(new HashSet());

وقال milhous:

تحقق من مجموعات API. إذا كنت تستخدم Addall يمكنك الحصول على أو. إذا كنت تستخدم Retainall، فيمكنك الحصول على و. أنا لا أعرف عن XOR.

يبدو أنه إذا كان لديك مجموعات s1 و s2 يمكنك القيام بذلك للحصول على XOR:

  1. نسخ المجموعة s1 ل s3
  2. s1.removeAll(s2); (S1 الآن يحتوي على جميع العناصر غير الموجودة في S2)
  3. s2.removeAll(s3); (S2 الآن يحتوي على جميع العناصر غير الموجودة في S3 = القديم S1)
  4. s1.addAll(s2); (S1 الآن يحتوي على اتحاد مجموعتين أعلاه)

تحقق من مجموعات api.. وبعد إذا كنت تستخدم Addall يمكنك الحصول على أو. إذا كنت تستخدم Retainall، فيمكنك الحصول على و. أنا لا أعرف عن XOR.

يحرر: من وثائق المجموعة.

... إذا كانت المجموعة المحددة أيضا مجموعة أيضا، فإن عملية Addall تعدل هذه المجموعة بفعالية بحيث تكون قيمةها هي اتحاد المجموعتين.

.... إذا كانت المجموعة المحددة هي أيضا مجموعة، فإن هذه العملية تعدل هذه المجموعة بفعالية بحيث تكون قيمتها تقاطع المجموعتين.

أنا متأكد من أن مجموعة Jakarta Common API تدعم النقابات والتقاطعات وما إلى ذلك.

سأدهش إذا لم تكن مجموعات Google API كذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top