linq - Getting distinct values from an ArrayList in C# -
i have arraylist
looks this
this how clientarray formed:
arraylist clientarray = new arraylist(); foreach (dictionary<string, object> media in medialist) { // advertisers container object dictionary<string, object> clientcontainer = (dictionary<string, object>)media["advertisers"]; //get list of advertisers (clients) var clientlist = clientcontainer["advertiser"] arraylist; var clientlistlist = clientlist.cast<dictionary<string, object>>().tolist(); //add fields not olalready in dictionary clientlistlist.foreach(d => d.add("mediacode", media["code"].tostring())); clientlistlist.foreach(d => d.add("medianame", media["name"].tostring())); clientlistlist.foreach(d => d.add("agencyalpha", mediaresponse["agencyalpha"].tostring())); clientlistlist.foreach(d => d.add("createdby", system.reflection.assembly.getexecutingassembly().fullname.tostring())); clientlistlist.foreach(d => d.add("createddt", datetime.now)); foreach (dictionary<string, object> client in clientlistlist) { clientarray.add(client); } }
this how clientarray looks like:
{ "client": [ { "code": "abc", "name": "abc inc", "businesskey": "abc123", "mediacode": "i", "medianame": "interactive", "agencyalpha": "ub", "createdby": "dataapi, version=1.0.0.0, culture=neutral, publickeytoken=null", "createddt": "2014-04-08t12:47:54.5855957-04:00" }, { "code": "def", "name": "def inc", "businesskey": "def456", "mediacode": "i", "medianame": "interactive", "agencyalpha": "ub", "createdby": "dataapi, version=1.0.0.0, culture=neutral, publickeytoken=null", "createddt": "2014-04-08t12:47:54.5855957-04:00" }, etc...
i need put distinct code
s list. have far returning all code
s (not want). how do this?
list<string> listofcodes = new list<string>(); foreach (dictionary<string, object> obj in clientarray ienumerable) { listofcodes.insert(0, obj["code"].tostring()); } listofcodes.distinct().tolist();
something ought you:
arraylist = getmyarraylist() ; ... list<string> listofcodes = clientarray .cast<dictionary<string,object>>() .select( x => x["code"] string) .distinct( stringcomparer.ordinalignorecase ) .tolist() ;
another approach use hashset<t>
or sortedset<t>
, like:
ienumerable<string> codebag = clientarray .cast<dictionary<string,object>>() .select( x => x["code"] string) .where( s => !string.isnullorempty(s) ) ; hashset<string> codeset = new hashset<string>( codebag , stringcomparer.ordinalignorecase ) ;
Comments
Post a Comment