Làm cách nào để so sánh các mục trong hai danh sách và tạo danh sách mới với sự khác biệt trong Groovy?Làm cách nào để so sánh hai danh sách trong Groovy
19
A
Trả lời
31
Bộ sưu tập giao nhau có thể giúp bạn với điều đó ngay cả khi hơi khó để đảo ngược nó. Có lẽ một cái gì đó như thế này:
def collection1 = ["test", "a"]
def collection2 = ["test", "b"]
def commons = collection1.intersect(collection2)
def difference = collection1.plus(collection2)
difference.removeAll(commons)
assert ["a", "b"] == difference
44
tôi chỉ cần sử dụng các toán tử số học, tôi nghĩ rằng nó là nhiều hơn nữa rõ ràng những gì đang xảy ra:
def a = ["foo", "bar", "baz", "baz"]
def b = ["foo", "qux"]
assert ["bar", "baz", "baz", "qux"] == ((a - b) + (b - a))
9
tôi giả OP là yêu cầu cho exclusive disjunction giữa hai danh sách ?
(Lưu ý: Cả trong những giải pháp trước đó xử lý các bản sao!)
Nếu bạn muốn mã đó cho mình trong Groovy, thực hiện như sau:
def a = ['a','b','c','c','c'] // diff is [b, c, c]
def b = ['a','d','c'] // diff is [d]
// for quick comparison
assert (a.sort() == b.sort()) == false
// to get the differences, remove the intersection from both
a.intersect(b).each{a.remove(it);b.remove(it)}
assert a == ['b','c','c']
assert b == ['d']
assert (a + b) == ['b','c','c','d'] // all diffs
Một Gotcha, được sử dụng danh sách/mảng ints. Bạn (có thể) có vấn đề, bởi vì phương pháp đa hình loại bỏ (int) vs remove (Object). See here for a (untested) solution.
Rather than reinventing các wheel however, bạn should just dụng an existing library (e.g. commons-collections
):
@Grab('commons-collections:commons-collections:3.2.1')
import static org.apache.commons.collections.CollectionUtils.*
def a = ['a','b','c','c','c'] // diff is [b, c, c]
def b = ['a','d','c'] // diff is [d]
assert disjunction(a, b) == ['b', 'c', 'c', 'd']
Các vấn đề liên quan
- 1. làm thế nào để so sánh hai danh sách, trường hợp đối tượng trong python
- 2. So sánh hai chuỗi/tệp XML trong Groovy/Java
- 3. Làm cách nào để so sánh hai phiên bản AssemblyName?
- 4. Danh sách so sánh Python
- 5. So sánh hai Danh sách cho các khác biệt
- 6. So sánh hai danh sách chung chung lớn
- 7. Làm thế nào để so sánh hai Danh sách <String> với nhau?
- 8. Cách so sánh hai ngày?
- 9. So sánh hai Danh sách <int>
- 10. Làm cách nào tôi có thể so sánh Danh sách để bình đẳng trong Dart?
- 11. Groovy hợp nhất hai danh sách?
- 12. so sánh danh sách Scala với danh sách Java
- 13. So sánh danh sách từ điển
- 14. cách tốt hơn cho So sánh Danh sách trong C#
- 15. Làm thế nào để so sánh hai danh sách lớn được sắp xếp một cách hiệu quả trong C#?
- 16. Làm cách nào để so sánh hai danh sách trong python và trả về kết quả phù hợp
- 17. So sánh Danh sách <String[]>
- 18. Cách Pythonic để so sánh hai danh sách và in ra sự khác biệt
- 19. Python: So sánh các Danh sách
- 20. Làm cách nào để so sánh chuỗi với danh sách "bộ lọc" trong LINQ?
- 21. Cách tốt nhất để so sánh hai danh sách chuỗi lớn, sử dụng C# và LINQ?
- 22. Làm cách nào để so sánh hai băm?
- 23. Làm cách nào để so sánh hai biểu thức lambda?
- 24. Làm cách nào để tôi thực hiện so sánh bình đẳng sâu của hai danh sách bộ dữ liệu?
- 25. làm thế nào để so sánh hai mảng trong python?
- 26. So sánh ổiChọn Danh sách Wtih?
- 27. So sánh null và số trong groovy
- 28. Cách so sánh hai ngày trong SQLite?
- 29. Java So sánh Hai Lists
- 30. so sánh nếu một phần tử tồn tại trong hai danh sách
Bạn need để say what bạn mean bởi "difference". Đơn đặt hàng có quan trọng không? Có nhiều bản sao quan trọng không? – John
Bạn có nghĩa là sự tách biệt độc quyền giữa hai danh sách? tức là https://en.wikipedia.org/wiki/Exclusive_or –