自定义排序键值对
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);
我有一个 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);