在dojo / javscript应用程序中
我正在尝试找到下面这个对象列表中找到重复项的最有效方法:
{ item: "A", value: "one" },
{ item: "B", value: "two" },
{ item: "C", value: "three" },
{ item: "B", value: "two" },
{ item: "D", value: "five" },
{ item: "C", value: "three" }
所以我作为成品需要的是:
找不到列表:
{ item: "A", value: "one" },
{ item: "D", value: "five" }
找到列表:
{ item: "B", value: "two" },
{ item: "C", value: "three" }
另外,我正在使用DOJO AMD所以我知道我有forEach,过滤器,有些可供我使用
我知道我可以做第一遍以获得重复值:
var split = function( list )
{
var found = [];
var objectList = lang.clone( list );
var test = objectList.pop();
objectList.forEach( function( inner )
{
if( test.item == test.item )
{
found.push( test.item );
}
} );
return found;
};
答案 0 :(得分:1)
如果您使用Java:停止使用列表。使用Set。这解决了所有问题。 Sry,你可能会感到失望,但答案很简单。
答案 1 :(得分:0)
您最好的方法是正确存储数据。
您可能仍然需要存储非唯一项目,如果是这样 - 继续使用ArrayList,但另外,请使用以下内容:
覆盖哈希码&等于此链接中显示的功能:What issues should be considered when overriding equals and hashCode in Java?
然后,使用Set(HashSet可能就足够了)来存储所有对象。此数据结构将忽略对于集合中已有元素不唯一的元素。
然后,您需要做的就是查询集合的大小,并为您提供列表中唯一元素的数量。