我有20個項目的元素列表和一個包含5個項目的數組,我需要比較每個項目的常見屬性,如果匹配的話。我需要將它們過濾到o/p的列表中。如何在不進行20 * 5 = 100比較的情況下有效比較它們。可能是通過使用散列表?請幫助...謝謝如何將數組中的每個元素與List中的每個元素進行比較?
1
A
回答
2
使用LINQ到對象擴展方法Enumerable.Join可能是表達這種最簡潔的方式:
List<MyListType> matches = myList
.Join(myArray,
myListItem => myListItem.someProperty, //if this prop
myArrayItem => myArrayItem.someProperty, //and this prop match
(myListItem, myArrayItem) => myListItem) //project to...
.ToList();
在內部,這個使用了哈希表狀結構從左邊創建(上面的myList
),然後遍歷連接的右側(上面的myArray
),查找從左側創建的集合中的匹配項。
相比您在上面描述(「20×5 = 100個比較」)
有效的(幼稚)笛卡爾積時,這顯著加快處理速度,但它確實是這樣的:
var lookup = lhs.ToLookup(leftItem => leftItem.someProp);
var matches = rhs.SelectMany(rightItem =>
lookup[rightItem.someProp]
.Select(leftItem => MethodToBeCalledWithTwoMatchingItems(leftItem, rightItem)));
0
多一點有效的哈希只是較小的列表,或改變少一個:
var hashSet = new HashSet<int> { 1, 2, 3, 4, 5 };
var result = list1.Where(item => hashSet.Contains(item.Property));
相關問題
- 1. 將變量與數組中的每個元素進行比較
- 2. 將列表中的每個元素與所有其他元素進行比較
- 3. 環路和數組的每個元素進行比較?
- 4. Xquery,將數組中的元素與下一個元素進行比較
- 5. 比較列表中的每個元素
- 6. 如何比較多維數組中的每個元素?
- 7. 比較2D數組中每一行的第一個元素
- 8. 將字符串與每個li元素進行比較
- 9. 如何比較列表中的每個元素與另一個列表中的每個元素?
- 10. 如何將一個字符串數組的每個元素與另一個字符串數組的每個元素進行比較?
- 11. 如何比較數組中的元素與SList中的元素?
- 12. Matlab,如何比較行矩陣的每個元素與另一行矩陣的每個元素?
- 13. 爲元素數組中的每個元素賦值每個元素jQuery
- 14. 將數組中的每個元素與第二個數組中的每個元素相乘
- 15. 將一個數組中的每個元素與另一個數組的每個元素相乘的方式?
- 16. Java如何將一個數組的元素與同一個數組的所有其他元素進行比較
- 17. 每個數組元素進行運算
- 18. 將列表中的元素與同一列表中的每個其他元素進行比較
- 19. 將CSV中的每個元素與使用python的其他元素進行比較
- 20. 將數組中的char元素與運算符進行比較
- 21. 將字符串與javascript中的數組元素進行比較
- 22. 如何將元素添加到數據中的每個元素?
- 23. perl將數組元素與單個字符進行比較
- 24. 比較兩個數組中的元素
- 25. 與陣列中的每個元素的比較鄰居環
- 26. PHP將數組元素添加到另一個數組中的每個元素
- 27. 如何比較LINQ中的每個元素?
- 28. 元素與-每個
- 29. 更改數組中的每個元素
- 30. 命名數組中的每個元素
由於一噸man..It工程:) –