リビジョン | 33c0f48efd3b9ff48d0469bc483825d00304387f (tree) |
---|---|
日時 | 2018-03-04 20:42:01 |
作者 | Kazuhiro Fujieda <fujieda@user...> |
コミッター | Kazuhiro Fujieda |
装備一覧に同一装備をまとめる階層を追加して見やすくする
@@ -35,42 +35,61 @@ namespace KancolleSniffer | ||
35 | 35 | |
36 | 36 | private TreeNode CreateItemNodes(IEnumerable<ItemStatus> itemList) |
37 | 37 | { |
38 | - var grouped = from byItem in (from item in itemList | |
38 | + var grouped = from item in itemList | |
39 | 39 | where item.Spec.Id != -1 |
40 | - orderby item.Spec.Type, item.Spec.Id, item.Alv, item.Level descending | |
41 | - group item by new {item.Spec.Id, item.Alv, item.Level} | |
42 | - into grp | |
43 | - from byShip in | |
44 | - (from item in grp | |
45 | - let ship = item.Holder | |
46 | - orderby ship.Level descending, ship.Spec.SortNo | |
47 | - group item by item.Holder.Id) | |
48 | - group byShip by grp.Key) | |
49 | - group byItem by byItem.First().First().Spec.Type; | |
40 | + orderby item.Spec.Type, item.Spec.Id, item.Alv, item.Level | |
41 | + group item by item.Spec.Type | |
42 | + into byTypeGroup | |
43 | + from bySpec in (from item in byTypeGroup | |
44 | + group item by item.Spec.Id | |
45 | + into bySpecGroup | |
46 | + from byParam in (from item in bySpecGroup | |
47 | + group item by new {item.Alv, item.Level} | |
48 | + into byParamGroup | |
49 | + from byHolder in (from item in byParamGroup group item by item.Holder.Id) | |
50 | + group byHolder by byParamGroup.Key) | |
51 | + group byParam by bySpecGroup.Key) | |
52 | + group bySpec by byTypeGroup.Key; | |
50 | 53 | |
51 | 54 | var root = new TreeNode(); |
52 | 55 | foreach (var byType in grouped) |
53 | 56 | { |
54 | - var typeName = byType.First().First().First().Spec.TypeName; | |
57 | + var typeName = byType.First().First().First().First().Spec.TypeName; | |
55 | 58 | var typeNode = new TreeNode(); |
56 | 59 | typeNode.Name = typeNode.Text = typeName; |
57 | 60 | root.Nodes.Add(typeNode); |
58 | - foreach (var byItem in byType) | |
61 | + foreach (var bySpec in byType) | |
59 | 62 | { |
60 | - var item = byItem.First().First(); | |
63 | + var item = bySpec.First().First().First(); | |
61 | 64 | var itemNode = new TreeNode(); |
62 | - itemNode.Name = itemNode.Text = item.Spec.Name + | |
63 | - (item.Alv == 0 ? "" : "+" + item.Alv) + | |
64 | - (item.Level == 0 ? "" : "★" + item.Level); | |
65 | + itemNode.Name = itemNode.Text = item.Spec.Name + "x" + | |
66 | + bySpec.SelectMany(spec => spec).SelectMany(param => param).Count(); | |
65 | 67 | typeNode.Nodes.Add(itemNode); |
66 | - foreach (var byShip in byItem) | |
68 | + foreach (var byParam in bySpec) | |
67 | 69 | { |
68 | - var ship = byShip.First().Holder; | |
69 | - var name = byShip.Key == -1 | |
70 | - ? "未装備x" + byShip.Count() | |
71 | - : (ship.Fleet != -1 ? ship.Fleet + 1 + " " : "") + | |
72 | - ship.Name + (ship.Level > 0 ? "Lv" + ship.Level : "") + "×" + byShip.Count(); | |
73 | - itemNode.Nodes.Add(name, name); | |
70 | + TreeNode paramNode; | |
71 | + if (bySpec.Count() == 1 && byParam.Key.Alv == 0 && byParam.Key.Level == 0) | |
72 | + { | |
73 | + paramNode = itemNode; | |
74 | + } | |
75 | + else | |
76 | + { | |
77 | + paramNode = new TreeNode(); | |
78 | + item = byParam.First().First(); | |
79 | + paramNode.Name = paramNode.Text = | |
80 | + (item.Spec.IsAircraft ? "+" + item.Alv : "") + "★" + item.Level + "x" + | |
81 | + byParam.SelectMany(param => param).Count(); | |
82 | + itemNode.Nodes.Add(paramNode); | |
83 | + } | |
84 | + foreach (var byShip in byParam) | |
85 | + { | |
86 | + var ship = byShip.First().Holder; | |
87 | + var name = byShip.Key == -1 | |
88 | + ? "未装備x" + byShip.Count() | |
89 | + : (ship.Fleet != -1 ? ship.Fleet + 1 + " " : "") + | |
90 | + ship.Name + (ship.Level > 0 ? "Lv" + ship.Level : "") + "x" + byShip.Count(); | |
91 | + paramNode.Nodes.Add(name, name); | |
92 | + } | |
74 | 93 | } |
75 | 94 | } |
76 | 95 | } |
@@ -93,7 +112,7 @@ namespace KancolleSniffer | ||
93 | 112 | // ReSharper disable PossibleNullReferenceException |
94 | 113 | => x.Level == y.Level && x.Spec == y.Spec && x.Holder.Id == y.Holder.Id && |
95 | 114 | x.Holder.Fleet == y.Holder.Fleet; |
96 | - // ReSharper restore PossibleNullReferenceException | |
115 | + // ReSharper restore PossibleNullReferenceException | |
97 | 116 | |
98 | 117 | public int GetHashCode(ItemStatus obj) => obj.Level + obj.Spec.GetHashCode() + obj.Holder.GetHashCode(); |
99 | 118 | } |