gpt4 book ai didi

c# - 按枚举排序 List

转载 作者:行者123 更新时间:2023-11-30 15:59:09 27 4
gpt4 key购买 nike

这让我抓狂,但这一定很简单。

我有一个类(class),力量的值(value)可以是高/中/低:-

public class SearchResults
{
private List<string> _categories;
public string caseID { get; private set; }
...
public string Strength { get; set; }
}

我执行 API 调用并获得 List<SearchResults>

var resultres = JsonConvert.DeserializeObject<List<SearchResults>>(mycase.GetResults());

我想做的是按 HIGH/MEDIUM/LOW 的顺序对结果进行排序,但如果我执行以下操作,它会按字母顺序排列,即 H/L/M

resultres.Sort((x, y) => x.matchStrength.CompareTo(y.matchStrength));

我已经(可能不正确地)尝试使用枚举:-

enum ResultStrength
{
HIGH,
MEDIUM,
LOW
}

但我找不到使用它来强制排序的方法,如果我使用以下命令,它会给我一个“无法将 lambda 表达式转换为类型‘System.Collections.Generic.IComparer’,因为它不是委托(delegate)类型"

resultres.Sort((x, y) => x.ResultStrength.CompareTo(y.ResultStrength));

我已经尝试实现各种 IComparer<SearchResults>Comparison<SearchResults>但我无法让它正常编译和/或工作。

最佳答案

如果您可以修改 SearchResults 类,则只需将 Strength 属性从字符串类型更改为 ResultStrength 枚举类型。 JSON.NET 足够智能,可以从字符串名称创建枚举值。

public ResultStrength Strength { get; set; }

排序会很简单:

resultres.OrderBy(r => r.Strength)

注意:如果您不向枚举成员提供值,默认情况下它们将获得以下值:

enum ResultStrength
{
HIGH = 0,
MEDIUM = 1,
LOW = 2
}

所以 HIGH 会先于 LOW。如果要倒序,可以使用OrderByDescending


否则,您可以按从 Strenth 字符串解析的枚举值排序:

resultres.OrderBy(r => (int)Enum.Parse(typeof(ResultStrength),r.Strength))

关于c# - 按枚举排序 List<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41940218/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com