Строка с разделителями-запятыми в группы диапазонов 2 Размерный массив - PullRequest
0 голосов
/ 15 июня 2019

У меня есть строка с разделителями-запятыми, которую нужно разбить на диапазоны массивов, которые можно передать в оператор BETWEEN сервера SQL.

Например, скажем, у меня есть следующая строка ниже, мне нужен соответствующий 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) 

Вместо

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

Моя фактическая строка с разделителями - более 5000 идентификаторов, поэтому для эффективности мне нужно использовать операторы BETWEEN, а не IN.

Какой самый эффективный способ сделать это с помощью C #?

1 Ответ

2 голосов
/ 17 июня 2019

Следующее решит вашу проблему:

Если ваши 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...