C# 基于序列的排序数组

C# 基于序列的排序数组,c#,C#,我正在尝试订购一个C格式的数组。该数组包含美元、欧元、英镑、人民币等货币代码 数组必须按以下优先顺序排序:美元、欧元、英镑、人民币、字母顺序 如何根据该序列进行排序 public class DerivativeTradeDto { public string SettlementCurrencyCode; } 派生Provider.GetRccDerivativeTrades返回类型为的数组 衍生化。结算货币代码包含货币代码 var derivativesTrades = deri

我正在尝试订购一个C格式的数组。该数组包含美元、欧元、英镑、人民币等货币代码 数组必须按以下优先顺序排序:美元、欧元、英镑、人民币、字母顺序

如何根据该序列进行排序

public class DerivativeTradeDto 
{
    public string SettlementCurrencyCode;
}
派生Provider.GetRccDerivativeTrades返回类型为的数组 衍生化。结算货币代码包含货币代码

var derivativesTrades = derivativeProvider
    .GetRccDerivativeTrades(uniqueId, runcContext)
    .ToArray();

如果您有一个常量列表要排序

我的方法是

var orderOfPreference = new List<string> { "USD", "EUR", "GBP", "CNY" };
var orderedResults = derivativeTrades.OrderBy(d => {
                var index = orderOfPreference.IndexOf(d.SettlementCurrencyCode);
                return index == -1 ? int.MaxValue : index;
            }).ThenBy(x => x.SettlementCurrencyCode);

返回索引==-1?int.MaxValue:索引将把未包含在OrderOfReference中的放在列表的索引位置之外。然后,BY确保它将按照参考顺序的字母顺序排列所有内容。您可以根据数据的长度更改int.MaxValue

我正在尝试的数据,例如OrderBy{USD,EUR},但给出了一个编译错误。这些是字符串吗?数组是自定义类的类型,其字符串成员包含这些值。前四个值和顺序已知,其余按字母顺序排列?实现。在比较器中,按顺序声明包含这四个特殊代码的数组。如果两个代码都在该数组中,则返回它们在数组中位置的比较。如果一个在数组中,而另一个不在数组中,那么只需返回一个负数,以显示数组中的一个位于第一位。如果两个都不在数组中,那么只需返回按字母顺序比较的结果。它会按字母顺序对列表中不在列表中的那些进行排序吗answer@Tom更新了我的答案