var records = from record in document.Root.Elements()
let member = record.Element("members").Element("member")
select new
{
Losses = int.Parse(record.Element("losses").Value),
Division = record.Element("division").Value,
Ratio = double.Parse(record.Element("ratio").Value, System.Globalization.CultureInfo.InvariantCulture.NumberFormat),
Points = int.Parse(record.Element("points").Value),
Wins = int.Parse(record.Element("wins").Value),
Player = new
{
Name = member.Element("name").Value,
FavoriteRace = member.Element("fav-race").Value,
CharacterCode = int.Parse(member.Element("character-code").Value),
BattleNetID = int.Parse(member.Element("bnet-id").Value)
}
};
var ladder = from record in records
orderby record.Points descending
select new
{
Player = record.Player.Name,
Points = record.Points,
Wins = record.Wins,
Losses = record.Losses,
Ratio = record.Ratio
};
ladder.Dump();
Spoiler:
un saluto a tutti gli javisti e p(c)accapi-isti :P
02-10-10, 15:03:28
Kemper Boyd
Riferimento: TGM Ladder
Bellino il linq :sisi:
02-10-10, 15:38:41
Kemper Boyd
Riferimento: TGM Ladder
Rilancio con la versione PHP che tiene anche conto della lega nell'ordinamento :D
var records = from record in document.Root.Elements()
let member = record.Element("members").Element("member")
select new
{
Losses = int.Parse(record.Element("losses").Value),
Division = record.Element("division").Value,
Ratio = double.Parse(record.Element("ratio").Value, System.Globalization.CultureInfo.InvariantCulture.NumberFormat),
Points = int.Parse(record.Element("points").Value),
Wins = int.Parse(record.Element("wins").Value), League = leagues[record.Element("league").Value],
Player = new
{
Name = member.Element("name").Value,
FavoriteRace = member.Element("fav-race").Value,
CharacterCode = int.Parse(member.Element("character-code").Value),
BattleNetID = int.Parse(member.Element("bnet-id").Value)
}
};
var ladder = from record in records
orderby record.League descending, record.Points descending
select new
{
Player = record.Player.Name,
Points = record.Points,
Wins = record.Wins,
Losses = record.Losses,
Ratio = record.Ratio,
League = record.League
};
ladder.Dump();
02-10-10, 16:10:34
Kemper Boyd
Riferimento: TGM Ladder
:lol:
Comunque suggerirei JSON (8.5kb) invece che XML (22kb).
02-10-10, 16:21:33
Kralizek
Riferimento: TGM Ladder
Citazione:
Originariamente Scritto da Kemper Boyd
Rilancio con la versione PHP che tiene anche conto della lega nell'ordinamento :D
Comunque suggerirei JSON (8.5kb) invece che XML (22kb).
Per Json devo sbattermi a scrivere le classi e passare il tutto al deserializzatore. Altrimenti, se volessi qualcosa tipo Linq to Xml per Json dovrei rivolgermi a questo progetto OS.
Ad ogni modo, in genere preferisco lavorare: se i dati vengono importati sul server, preferisco usare xml. se è una richiesta dal client, meglio json.
Un po' per i tool, un po' perchè xml è migliore nella comunicazione B2B (business-to-business) per via degli schema e dei namespace che permettono di avere un po' di gioco con i problemi di versioning.
02-10-10, 16:36:26
Kemper Boyd
Riferimento: TGM Ladder
Sisi mi riferivo al caso in questione non in genere, e credevo che linq supportasse nativamente json, quindi bon (stiamo esagerando :asd:)
02-10-10, 17:07:14
Kralizek
Riferimento: TGM Ladder
Citazione:
Originariamente Scritto da Kemper Boyd
Sisi mi riferivo al caso in questione non in genere, e credevo che linq supportasse nativamente json, quindi bon (stiamo esagerando :asd:)
linq supporta tutto e niente. nel senso che di base linq non è che un set di operazioni costruite intorno ad un'interfaccia ( IEnumerable<T> ). Tutto ciò che implementa questa interfaccia è buona da mandare in pasto a Linq.
Ma nel frattempo non abbiamo ancora nulla. Ed in questo viene in aiuto un'altra interfaccia ( IQueryable<T> ) che, per dirla in breve, permette di trasformare una query linq in qualcosa di totalmetne diverso (ad es. LinqToSql e LinqToEntities trasformano una query linq in una query sql).
Spoiler:
cmq ecco qui la versione json :asd:
ho aggiunto anche delle enum, altrimenti il codice è di difficile lettura :P
come vedi ho dovuto creare delle classi che mi permettessero di istruire il serializzatore sul come leggere la stringa json. Laborioso ma efficace e type-safe... quelle cose che noi architetti amiamo insomma =)
WebClient wc = new WebClient();
byte[] json = wc.DownloadData(url);
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Record[]));
MemoryStream ms = new MemoryStream(json);
var records = (Record[])serializer.ReadObject(ms);
var ladder = from record in records
orderby record.League descending, record.Points descending
select record;
ladder.Dump();
}
// Define other methods and classes here
[DataContract(Name = "record")]
public class Record
{
[DataMember(Name = "losses")]
public int Losses { get; set; }
[DataMember(Name = "is_random")]
public bool IsRandom { get; set; }
[DataMember(Name = "division")]
public string Division { get; set; }
[DataMember(Name = "ratio")]
public double Ratio { get; set; }
[DataMember(Name = "division_id")]
public int DivisionID { get; set; }
[DataMember(Name = "bracket")]
public int Bracket { get; set; }
[DataContract]
public enum League : short
{
[EnumMember(Value = "bronze")]
Bronze = 1,
[EnumMember(Value = "silver")]
Silver = 2,
[EnumMember(Value = "gold")]
Gold = 3,
[EnumMember(Value = "platinum")]
Platinum = 4,
[EnumMember(Value = "diamond")]
Diamond = 5
}
[DataContract(Name = "race")]
public enum Race : short
{
[EnumMember(Value = "terran")]
Terran = 1,
[EnumMember(Value = "protoss")]
Protoss = 2,
[EnumMember(Value = "zerg")]
Zerg = 3,
[EnumMember(Value = "random")]
Random = 0
}
[DataContract(Name = "region")]
public enum Region : short
{
[EnumMember(Value = "eu")]
EU = 1
}
02-10-10, 17:16:14
Kurtz
Riferimento: TGM Ladder
osignore fermatevi :asd:
02-10-10, 17:22:57
Kurtz
Riferimento: TGM Ladder
cmq bravo renato, carina come idea
02-10-10, 17:35:29
Spazzy84
Riferimento: TGM Ladder
Voi programmatori siete gente strana.
Per fortuna ho fatto il sistemist... oh wait
02-10-10, 17:37:43
Kurtz
Riferimento: TGM Ladder
ma complimenti al darth che sfiora i 1500 e sopratutto mantiene un ottimo 60% winrate in piena mid diamond :sisi: complimenti.
02-10-10, 17:41:24
Kemper Boyd
Riferimento: TGM Ladder
Citazione:
Originariamente Scritto da Spazzy84
Voi programmatori siete gente strana.
Per fortuna ho fatto il sistemist... oh wait
:asd:
Citazione:
Originariamente Scritto da Kurtz
ma complimenti al darth che sfiora i 1500 e sopratutto mantiene un ottimo 60% winrate in piena mid diamond :sisi: complimenti.
Si davvero, grats darth!
02-10-10, 18:07:57
Spazzy84
Riferimento: TGM Ladder
già già il 60 è una % della madonna :sisi:
Io per tenere il 50 scarso in platinum sto davvero faticando :|
02-10-10, 18:13:09
Kurtz
Riferimento: TGM Ladder
io non sto capendo il sistema, fa fare 5 partite vs platinum / low diamond poi mi sbatte 5 volte contro gente a 1700 e poi torna ai platinum etc etc, continuo a vincere 6 perdere 4 vincere 6 perdere 4 :asd:
poi odio i cheese, ci perdo un sacco di partite e mi incazzo.
02-10-10, 18:18:43
Kemper Boyd
Riferimento: TGM Ladder
Citazione:
Originariamente Scritto da Kurtz
poi odio i cheese, ci perdo un sacco di partite e mi incazzo.
:sisi:
Continuo a ripetermi che sono tutte strategie legittime ecc ecc pero' mi girano le balle ogni volta :asd:
02-10-10, 18:42:02
DagonCultist
Riferimento: TGM Ladder
bellissima :o
02-10-10, 19:00:40
Spazzy84
Riferimento: TGM Ladder
Citazione:
Originariamente Scritto da Kemper Boyd
:sisi:
Continuo a ripetermi che sono tutte strategie legittime ecc ecc pero' mi girano le balle ogni volta :asd:
*
:asd:
specialmente i cheese protoss, quando mi zealotano in base, anche se scoutati non riesco a fermarli :facepalm:
03-10-10, 00:46:05
Kralizek
Riferimento: TGM Ladder
Citazione:
Originariamente Scritto da Spazzy84
*
:asd:
specialmente i cheese protoss, quando mi zealotano in base, anche se scoutati non riesco a fermarli :facepalm: