From 3d1a365079e957aa75468cfba1b5f6dae794b494 Mon Sep 17 00:00:00 2001 From: goddessluboyan <739749502@qq.com> Date: Mon, 25 Mar 2024 20:37:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=AF=B9=E6=9D=90=E6=96=99?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E9=A1=B5=E9=9D=A2=E4=B8=AD=E7=9A=84=E6=9D=90?= =?UTF-8?q?=E6=96=99=E5=81=9A=E5=88=9D=E6=AD=A5=E6=8E=92=E5=BA=8F=E3=80=82?= =?UTF-8?q?=20=E6=9B=B4=E7=BB=86=E8=87=B4=E7=9A=84=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=E3=80=81=E5=88=86=E7=B1=BB=E5=8A=9F=E8=83=BD=EF=BC=8C=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E9=9B=86=E6=88=90=E8=A7=82=E6=B5=8B=E6=9E=A2=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=89=8D=E8=83=BD=E8=BF=9B=E8=A1=8C=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Cultivation/CultivationViewModel.cs | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/CultivationViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/CultivationViewModel.cs index fa7424cd..a2251ae4 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/CultivationViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/CultivationViewModel.cs @@ -10,6 +10,7 @@ using Snap.Hutao.Service.Navigation; using Snap.Hutao.Service.Notification; using Snap.Hutao.View.Dialog; using System.Collections.ObjectModel; +using System.Diagnostics; namespace Snap.Hutao.ViewModel.Cultivation; @@ -181,6 +182,15 @@ internal sealed partial class CultivationViewModel : Abstraction.ViewModel { CultivationMetadataContext context = await metadataService.GetContextAsync().ConfigureAwait(false); statistics = await cultivationService.GetStatisticsCultivateItemCollectionAsync(SelectedProject, context, token).ConfigureAwait(false); + if (statistics is not null) + { + statistics = this.SortStatistics(statistics); + foreach (var item in statistics) + { + Debug.Print("Name: {0}, Id: {1}, Rank: {2}, Material: {3}, Item: {4}", + item.Inner.Name, item.Inner.Id.Value, item.Inner.RankLevel, item.Inner.MaterialType, item.Inner.ItemType); + } + } } catch (OperationCanceledException) { @@ -192,6 +202,35 @@ internal sealed partial class CultivationViewModel : Abstraction.ViewModel } } + private ObservableCollection SortStatistics(ObservableCollection statistics) + { + return statistics.Order(new StatisticsCaltivateItemComparer()).ToObservableCollection(); + } + + private class StatisticsCaltivateItemComparer: IComparer + { + public int Compare(StatisticsCultivateItem? x, StatisticsCultivateItem? y) + { + // TODO: 理论上的最优解:先通过观测枢获取所有背包物品,然后根据filter字段依次分类,先按这个类别做排序,然后再按品质等进行排序 + // 不仅如此,以后想按照材料类型分类的话,这也是必做的。 + + // 对null做判定,防止IDE警告 + if (x is null) { return -1; } + if (y is null) { return -1; } + + // 摩拉、矿、经验书全局只出现一次,放在最前面 + if (x.Inner.Name == "摩拉") { return -1; } + if (y.Inner.Name == "摩拉") { return 1; } + if (x.Inner.Name == "精锻用魔矿") { return -1; } + if (y.Inner.Name == "精锻用魔矿") { return 1; } + if (x.Inner.Name == "大英雄的经验") { return -1; } + if (y.Inner.Name == "大英雄的经验") { return 1; } + + // 剩下的物品暂时按照id排序,更细致的排序策略以后再说 + return (int)x.Inner.Id.Value - (int)y.Inner.Id.Value; + } + } + [Command("NavigateToPageCommand")] private void NavigateToPage(string? typeString) {