c# - 将逗号分隔的字符串分组为范围组 2 维数组
问题描述
我有一个逗号分隔的字符串,我需要将其分解为可以传递到 SQL Server 的 BETWEEN 语句中的数组范围。
例如,假设我有下面的字符串,我需要返回相应的 returnVal;
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 之间的语句看起来像
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 在哪里(1,2,5,6,7,8,11,12,13,15,16,17,18,19)
我的实际分隔字符串超过 5000 个 ID,因此为了提高效率,我需要使用 BETWEEN 语句而不是 IN 语句。
使用 C# 执行此操作的最有效方法是什么?
解决方案
以下将解决您的问题:
如果您的 int 是分隔字符串,则可以使用 split 将其转换为 int 数组。
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;
}
推荐阅读
- javascript - 有没有办法在 Tweet/FB 共享中包含字符串变量?
- outlook - 如何在两个不同的 Office JS 加载项之间共享用户漫游设置?
- python - 字典理解对字典中的键进行分组
- ruby - 如何将静态 Ruby 代码转换为动态 Ruby 代码
- angular - 如何使用数据表在angular7中设置搜索框、排序和分页
- java - Spring Jpa Repository 抛出的异常没有被异常处理程序@Controller Advice 捕获
- css - bootstrap 4 列中的背景图像
- flutter - 带有for循环的列表中的动态图标索引
- nginx - nginx 发送重复的标头
- apostrophe-cms - 自定义页面模板