Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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#对逗号分隔的数字字符串进行排序 < C >你认为最快的方法是什么?代码最终将成为SQL Server CLR C#用户定义函数的一部分,但我认为这对于这个问题并不重要 INPUT: "1,3,2,5,4" OUTPUT: "1,2,3,4,5"_C#_Sql Server - Fatal编程技术网

C#对逗号分隔的数字字符串进行排序 < C >你认为最快的方法是什么?代码最终将成为SQL Server CLR C#用户定义函数的一部分,但我认为这对于这个问题并不重要 INPUT: "1,3,2,5,4" OUTPUT: "1,2,3,4,5"

C#对逗号分隔的数字字符串进行排序 < C >你认为最快的方法是什么?代码最终将成为SQL Server CLR C#用户定义函数的一部分,但我认为这对于这个问题并不重要 INPUT: "1,3,2,5,4" OUTPUT: "1,2,3,4,5",c#,sql-server,C#,Sql Server,排序必须通过比较整数而不是字符串或字符来完成 我目前有以下内容,但它是基于字符串而不是整数排序的。我可以介绍一个自定义比较器,但我想在我这么做之前,我会问这个问题,看看其他人是否有任何想法 [Microsoft.SqlServer.Server.SqlFunction] public static SqlString udfSortDimensionValueIDString(SqlString DimensionValueIDs) { string[] values = ((strin

排序必须通过比较整数而不是字符串或字符来完成

我目前有以下内容,但它是基于字符串而不是整数排序的。我可以介绍一个自定义比较器,但我想在我这么做之前,我会问这个问题,看看其他人是否有任何想法

[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString udfSortDimensionValueIDString(SqlString DimensionValueIDs)
{
    string[] values = ((string)DimensionValueIDs).Split(',');
    Array.Sort(values);
    return String.Join(",", values);
}
如果需要,请使用.NET 3.5。

您可以使用Linq:


可以使用convert库拆分逗号上的字符串,并将每个字符串转换为一个数字

这会给你字母排序,对吗?那么1100和1000会在2之前出现,对吗?输入中的
01
呢?您的输出是否也应该包含
01
,或者
1
可以吗?这就是为什么他说他想要整数排序,但到目前为止只实现了字符串排序。。。它有助于全面阅读question.Array.Sort(values,new AlphanumComparatorFast());“代码最终将成为SQL Server CLR C#用户定义函数的一部分,但我认为这对于这个问题并不重要”-可能是-SQL中的排序可能会更快,因此,如果这用于在子句中开发
,那么就没有必要进行分析。在我的示例web应用程序中,
Split
接受
char
而不是
string
。有什么我需要知道的吗?我想这不会比原来的解决方案快很多。唯一的改进是数字的排序,而瓶颈是拆分字符串的内存分配。@Bharadwaj:很抱歉输入错误:
Join
需要
string
,而
Split
需要
Char
的结果如下。谢谢Join方法不喜欢它试图连接int[]而不是String[],所以我只是按int.Parse(x)排序,而不是选择它<代码>返回字符串.Join(“,”,((字符串)dimensionValueId).Split(新字符[]{,'},StringSplitOptions.RemoveEmptyEntries).Select(x=>x).OrderBy(x=>int.Parse(x)).ToArray()
对于那些对性能增益感兴趣的人,我针对TSQL等价物测试了这个新的CLR函数(使用一个表函数将字符串拆分成行,排序,然后使用For xml path进行连接)。在200K行未排序的CSV字符串上,CLR函数在4.174秒内处理。TSQL处理时间为190.197秒,时间缩短了97.8%。(SQL Server 2008 R2位于具有8GB RAM的Windows 2008 Server虚拟机上)。
  using System.Linq; // no include required, just uses the namespace

  ...

  String Input = "1,3,2,5,4";

  String Output = String.Join(",", Input
    .Split(',')
    .Select(x => int.Parse(x))
    .OrderBy(x => x));
string s = "1,3,2,5,4";
string ordered = String.Join(",", s.Split(',').Select(c => Convert.ToInt32(c)).OrderBy(i=>i));