自定义排序键值对

Custom sort of keyvaluepair

我有一个 KeyValuePair<string, string>,其中包含以下条目:

[adress_first_name, Andreas]
[adress_last_name, Test]
[adress_street, Berlinerstraße 2]
[adress_street_name, Berlinerstraße]
[adress_street_number, 2]
**[adress_street2, Tür 5]**
[adress_zipcode, 4600]

不幸的是,正确的顺序必须是

[adress_first_name, Andreas]
[adress_last_name, Test]
[adress_street, Berlinerstraße 2]
**[adress_street2, Tür 5]**
[adress_street_name, Berlinerstraße]
[adress_street_number, 2]
[adress_zipcode, 4600]

由于外部合作伙伴(签署此列表的人,我们需要验证签名以确保没有任何内容被操纵),排序顺序必须像第二个示例。

使用 Linq 执行此操作的最佳方法是什么?当然,还有其他的,依此顺序。 street2 不是唯一的例子。

目前我像这里一样订购列表

首先通过使 address 和 address2 相同来排序它们,然后通过自然拆分平局的键排序:

.OrderBy(kv => (kv.Key.TrimEnd('2'), kv.Key))

这利用所有属性按出现顺序排序的元组

您也可以使用长格式:

.OrderBy(kv => kv.Key.TrimEnd('2')).ThenBy(kv => kv.Key)

如果您有更多(地址 3、4、5..),您可以将它们添加到 trim。如果您违反 9 并转到地址 10,您可以按所有数字的 trim 排序,然后是键的长度(因此 9 在 10 之前排序),然后是键本身对数字排序

使用序号字符串比较器。

.OrderBy(kv => kv.Key, StringComparer.Ordinal);