请问如果我有这样一个json:
[{"ID":1,"Data":{"subjectCode":"1","subjectName":"1","subjectType":"1","componentFormat":"2"}},{"ID":2,"Data":{"subjectCode":"2","subjectName":"2","subjectType":"1","componentFormat":"2"}},{"ID":4,"Data":{"subjectCode":"1","subjectName":"1","subjectType":"1","componentFormat":"2"}}]
我要判断Data里面是否有重复的怎么办啊?就是判断每个ID里面的Data会不会和其他ID里的Data重复。。。
本质就是字符串的比较嘛。
可否说的详细一些,或者给一个解决方法,谢谢。。。
@临冰听雪丶: 首先确定你是用什么语言处理这JSON?
@Firen: 前台js最好,当然NET后台也可以
@临冰听雪丶:
@临冰听雪丶: c# 代码
@Firen: 嗯嗯,谢谢了,嘿嘿
@临冰听雪丶:
不应该这样写吧
你的这个对象明显是 id是唯一的
换句话说 只要比较id是否重复就好了
第二 目前的做法是比较对象是否重复 用的循环比较 如果你有300个对象呢 那么计算次数不是 300*300么
很快就会当机的
所以我建议你用dictionary 这样的话 时间复杂度最低
@小眼睛老鼠: 1我的ID虽然是唯一的,但是我需要的是数据的重复。因为ID其实是我在push js的时候一个自增而已。
2你说的字典,我不是很明白要怎么做,一个个添加到字典中吗?
@小眼睛老鼠: 我感觉,循环的速度,应该还算可以吧
你的Data就个json你怎么判断,至少判断其中一个属性把 比如subjectName
我要判断每一列,Data中的每一项,只要有其中一项不同,就返回true,比如ID1的和ID2的里面的Data全部相同的话,就返回一个false,只要有一项不同就返回true。
遍历之后呢?我json这块不是很好。。。您能大概给我举个例子吗?感激不尽。。。
@临冰听雪丶: 或者,你直接将json数据,post到服务器,将json数据转到list中,用linq可以方便的进行分组。将分组统计大于1的ID返回给客户端就行了。
@FreeSaber: linq没怎么接触。。。转换list我会,请问是用linq分组统计要怎么写啊?
你这问题二义性是有的,如果在后台用NET就比较好办,如果在前端用JAVASCRIPT是麻烦一点。
也可以把这些数据使用ajax的方式发在后台验证然后再返回。那如果在后台用NET的话,需要怎么做呢?
1、你说的重复是整条数据还是数据里的某些字段
2、如果是整条数据可以在输出的时候时候使用迭代方式判断 < java hashmap<key,value>>,如果是某些字段也可以采用比较的方式.
1/subjectName/subjectType/componentFormat就这三个主要的字段就可以
2/您可以给我写个大概的例子吗?js我不是很熟。您这样说我不知道该如何下手。。。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml; using System.Runtime.Serialization; using System.Web.Script.Serialization; using System.Collections; namespace ConsoleApplication6 { public class C { public List<A> list; } public class A:IEqualityComparer<A> { public string ID; public B Data; public bool Equals(A x, A y) { if (x.Data.subjectCode.Equals(y.Data.subjectCode) && x.Data.subjectName.Equals(y.Data.subjectName) && x.Data.subjectType.Equals(y.Data.subjectType) && x.Data.componentFormat.Equals(y.Data.componentFormat)) { return true; } return false; } public int GetHashCode(A obj) { return obj.ToString().GetHashCode(); } } public class B { public string subjectCode; public string subjectName; public string subjectType; public string componentFormat; } class Program { static void Main(string[] args) { string str = "{\"list\":[{\"ID\":1,\"Data\":{\"subjectCode\":\"1\",\"subjectName\":\"1\",\"subjectType\":\"1\",\"componentFormat\":\"2\"}},{\"ID\":2,\"Data\":{\"subjectCode\":\"2\",\"subjectName\":\"2\",\"subjectType\":\"1\",\"componentFormat\":\"2\"}},{\"ID\":4,\"Data\":{\"subjectCode\":\"1\",\"subjectName\":\"1\",\"subjectType\":\"1\",\"componentFormat\":\"2\"}}]}"; JavaScriptSerializer jsonSerialize = new JavaScriptSerializer(); C a= jsonSerialize.Deserialize<C>(str); List<A> list= a.list; var listB = list.Distinct(); //找到非重复的项 foreach (var item in listB) { Console.WriteLine(item.ID); } } } }
我运行出来的结果事故124,可是1和4不是重复的吗?
@临冰听雪丶: 我写错了一行代码:
string str = "{\"list\":[{\"ID\":1,\"Data\":{\"subjectCode\":\"1\",\"subjectName\":\"1\",\"subjectType\":\"1\",\"componentFormat\":\"2\"}},{\"ID\":2,\"Data\":{\"subjectCode\":\"2\",\"subjectName\":\"2\",\"subjectType\":\"1\",\"componentFormat\":\"2\"}},{\"ID\":4,\"Data\":{\"subjectCode\":\"1\",\"subjectName\":\"1\",\"subjectType\":\"1\",\"componentFormat\":\"2\"}}]}"; JavaScriptSerializer jsonSerialize = new JavaScriptSerializer(); C a= jsonSerialize.Deserialize<C>(str); List<A> list= a.list; var listB = list.Distinct(new A()); //找到非重复的项 foreach (var item in listB) { Console.WriteLine(item.ID); }
@临冰听雪丶: 这一句应该这样子写:
var listB = list.Distinct(new A());
@临冰听雪丶: 这一句的意思是 加入去重复的“比较器模板”。
@田麦成: 噢。。。嘿嘿,谢谢拉,请问使用list的Distinct和循环,哪个执行的效率会比较好呢?
js里也有map吧,先find一下,没有就add(insert),有就判重呗
js我不太知道该如何去操作
jquery.linq.js和后台的linq基本一致