首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将逗号分隔的字符串分组为范围Group二维数组

将逗号分隔的字符串分组为范围Group二维数组
EN

Stack Overflow用户
提问于 2019-06-15 09:06:00
回答 1查看 674关注 0票数 0

我有一个逗号分隔的字符串,我需要将它分成数组范围,这些数组范围可以传递给SQL server的BETWEEN语句。

例如,假设我有下面的字符串,我需要返回相应的returnVal;

代码语言:javascript
运行
复制
string delimited = "1,2,5,6,7,8,11,12,13,15,16,17,18,19"; 
returnVal = int[,] ranges = new int[4, 2] { { 1, 2 }, { 5, 8 }, { 11, 13 }, { 15, 19 } };

然后,我的SQL Between语句将如下所示

代码语言:javascript
运行
复制
WHERE (ID BETWEEN 1 AND 2) OR (ID BETWEEN 5 AND 8)  OR (ID BETWEEN 11 AND 13)  OR (ID BETWEEN 15 AND 19) 

而不是

其中ID IN(1,2,5,6,7,8,11,12,13,15,16,17,18,19)

我的实际分隔字符串超过5000个IN,因此为了提高效率,我需要使用BETWEEN语句而不是IN语句。

使用C#执行此操作的最有效方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-17 11:05:28

下面的方法可以解决你的问题:

如果int是一个带分隔符的字符串,您可以使用split将其转换为int数组。

代码语言:javascript
运行
复制
var intArray = **array of integers**
var ranges = new List<List<int>>();

int? topRange = intArray[0];
int? lastId = null;
int bottomRange; 
foreach(int id in intArray)
{
    if(topRange == null)
    {
        topRange = id;
    }
    if (lastId != null && id != (lastId + 1))
    {
        bottomRange = lastId.Value;
        ranges.Add(new List<int>() { topRange.Value, bottomRange });
        topRange = id;
    }
    lastId = id;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56606579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档