Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中重新实现PHP7.3数组排序方法?_C#_Sorting - Fatal编程技术网

如何在C#中重新实现PHP7.3数组排序方法?

如何在C#中重新实现PHP7.3数组排序方法?,c#,sorting,C#,Sorting,我面对的是一个第三方API端点,它是用PHP编写的,在PHP7.3下运行,它对请求参数进行排序,并计算其SHA签名(不包括签名参数本身),该签名必须与我在请求参数中提供的签名相匹配 下面是排序的PHP示例代码: $sort_case_sensitive = true; $keys = array_keys($parameters); $keys_to_sort = array(); foreach ($keys as $key) { $keys_to_sort[] = $sort_cas

我面对的是一个第三方API端点,它是用PHP编写的,在PHP7.3下运行,它对请求参数进行排序,并计算其SHA签名(不包括签名参数本身),该签名必须与我在请求参数中提供的签名相匹配

下面是排序的PHP示例代码:

$sort_case_sensitive = true;
$keys = array_keys($parameters);
$keys_to_sort = array();
foreach ($keys as $key)
{
    $keys_to_sort[] = $sort_case_sensitive
                  ? $key
                  : strtoupper( $key );
}

array_multisort( $keys_to_sort, SORT_STRING, $keys );
此PHP函数的结果如下所示:

address_street
address_street2
address_street_name
address_street_number
但是,我的客户机是用C#编写的,排序(默认算法)输出如下所示:

address_street
address_street_name
address_street_number
address_street2

如何在C#中重新实现PHP的排序算法?我找不到PHP用于排序的字母表的参考。我可以看到对PHPs源代码中字符串排序的
zend_binary\u strcasecmp\u l
调用,但我找不到
zend_binary\u strcasecmp\u l
的定义,只有标题。

尝试使用顺序比较器:

var l = new List<string>();

l.Add("address_street_name");
l.Add("address_street_number");
l.Add("address_street");
l.Add("address_street2");

l.Sort(StringComparer.Ordinal);

foreach(string s in l) Console.WriteLine(s);
var l=新列表();
l、 添加(“地址、街道、名称”);
l、 添加(“地址、街道、编号”);
l、 加上(“地址街”);
l、 添加(“地址_街2”);
l、 排序(StringComparer.Ordinal);
foreach(l中的字符串s)控制台。WriteLine(s);

尝试使用顺序比较器:

var l = new List<string>();

l.Add("address_street_name");
l.Add("address_street_number");
l.Add("address_street");
l.Add("address_street2");

l.Sort(StringComparer.Ordinal);

foreach(string s in l) Console.WriteLine(s);
var l=新列表();
l、 添加(“地址、街道、名称”);
l、 添加(“地址、街道、编号”);
l、 加上(“地址街”);
l、 添加(“地址_街2”);
l、 排序(StringComparer.Ordinal);
foreach(l中的字符串s)控制台。WriteLine(s);

Zend现在显然是开源的。也许您可以在该项目的源代码中找到线索(与PHP相反)。不管怎样,你确定你的bug不在C#中吗?您还没有向我们展示如何实现它。您所引用的Zend函数(从其名称来看)似乎与进行案例比较有关……但是您的示例结果都是小写的,因此案例比较不应该影响它。似乎更多的是考虑数字是在数字字符之前还是之后?你有一个排序大写的例子吗?给定
var q=new string[]{“address_street”、“address_street2”、“address_street_name”、“address_street_number”}
,两者都
Array.Sort(q,StringComparer.OrdinalIgnoreCase)
数组.Sort(q,StringComparer.Ordinal)
给出显示的结果。@AndrewMorton:
$sort\u区分大小写
对于我使用的API版本总是
true
。所以在我的项目中没有大写字母排序。当我手动“修复”查询(手动重新排序)时,我得到了PHP正在寻找的签名。Zend现在显然是,它说它是开源的。也许您可以在该项目的源代码中找到线索(与PHP相反)。不管怎样,你确定你的bug不在C#中吗?您还没有向我们展示如何实现它。您所引用的Zend函数(从其名称来看)似乎与进行案例比较有关……但是您的示例结果都是小写的,因此案例比较不应该影响它。似乎更多的是考虑数字是在数字字符之前还是之后?你有一个排序大写的例子吗?给定
var q=new string[]{“address_street”、“address_street2”、“address_street_name”、“address_street_number”}
,两者都
Array.Sort(q,StringComparer.OrdinalIgnoreCase)
数组.Sort(q,StringComparer.Ordinal)
给出显示的结果。@AndrewMorton:
$sort\u区分大小写
对于我使用的API版本总是
true
。所以在我的项目中没有大写字母排序。当我手动“修复”查询(手动重新排序)时,我得到了PHP正在寻找的签名。使用
l.Sort(StringComparer.Ordinal),结果与预期一致。谢谢。我使用了
l.Sort()
。使用
l.Sort(StringComparer.Ordinal),结果与预期一致。非常感谢。