/// <summary> /// 2つのレコードをマージ /// </summary> /// <param name="target">マージするレコード</param> /// <returns>マージされたレコード</returns> public DropResult Merge(DropResult target) { //自分自身をディープコピー var result = new DropResult(); foreach (var d in this.Table) { result.Table[d.Key] = d.Value.DeepCopy(); } result.TotalNum = this.TotalNum; //ターゲットをマージする foreach (var d in target.Table) { DropTableItem item; //マージ元にあった場合 if (result.Table.TryGetValue(d.Key, out item)) { result.Table[d.Key] = item.Merge(d.Value); } //なかった場合 else { result.Table[d.Key] = d.Value.DeepCopy(); } } result.TotalNum += target.TotalNum; return(result); }
/// <summary> /// ディープコピー /// </summary> /// <returns>ディープコピーされたインスタンス</returns> public DropResult DeepCopy() { var result = new DropResult(); foreach (var t in this.Table) { result.Table[t.Key] = t.Value; } result.TotalNum = this.TotalNum; return(result); }
public void ReadBattleResult(string responseBody, int targetShipId, int[] sameShipIds) { if (NowCell == null) { return; } var strjson = responseBody.Replace("svdata=", ""); var battleResult = JsonConvert.DeserializeObject <RootBattleResult>(strjson); if (battleResult.api_data == null) { return; } //勝敗ランクの取得 var winrank = WinRankEx.GetWinRank(battleResult.api_data.api_win_rank); if (winrank != WinRank.S) { return; } //作戦難易度 if (NowCell == null || MapInfo == null) { return; } var map = MapInfo.Where(x => x.api_id == NowCell.api_maparea_id * 10 + NowCell.api_mapinfo_no).FirstOrDefault(); var difficulty = 0; if (map != null && map.api_eventmap != null) { difficulty = map.api_eventmap.api_selected_rank; } //ドロップの取得 int id = 0; if (battleResult.api_data.api_get_ship != null) { id = battleResult.api_data.api_get_ship.api_ship_id; } //同型艦の所持数 int numTargetShip = 0; if (PortResponseBody != null) { foreach (var i in sameShipIds) { var match = System.Text.RegularExpressions.Regex.Matches(PortResponseBody, "\"api_ship_id\":" + i + ",\"api_lv\""); numTargetShip += match.Count; } } //サーチする艦以外はドロップなしとする if (id != targetShipId) { id = 0; } //ドロップ条件の取得 var condition = DropCondition.CreateInstance(NowCell, difficulty, battleResult.api_data.api_win_rank, numTargetShip); //テーブルに追加 DropResult result; if (!Summary.TryGetValue(condition, out result)) { result = new DropResult(); } result.AddTable(id); Summary[condition] = result; }