2016-05-04 2 views

ответ

1

Это не прямая проблема, которую я нашел мой подумав об этом несколько минут, прежде чем я, наконец, подумал о том, как это сделать.

Для получения выходных данных из введенного ввода требуется какой-то пользовательский подход к сериализации/сериализации. В приведенном ниже коде создается 2D-массив, который будет содержать уникальные индексы (58, 59 и т. Д.) и заполнить их списком связанных значений с запятой (сделать так, чтобы сделать сериализ легким).

Структура мудрое это будет выглядеть примерно так, когда десериализуются

----- Array Debug ------ 
data(0, 0) = 58 
data(1, 0) = 270,271,272 
data(0, 1) = 59 
data(1, 1) = 270,271,272 

Затем мы используем, что в качестве основы для построения сериализированных строк в требуемом формате.

'Function takes string input in the form <index>|<value>, ... extracts 
'them into a 2D array groups duplicate indexes together. 
Function DeserialiseToCustomArray(str) 
    Dim a1, a2, x, y, idx 
    If Len(str & "") > 0 Then 
    a1 = Split(str, ",") 
    ReDim data(1, 0) 
    For x = 0 To UBound(a1) 
     a2 = Split(a1(x), "|") 
     If IsArray(data) Then 
     idx = -1 
     'Check for duplicates 
     For y = 0 To UBound(data, 2) 
      If data(0, y) = a2(0) Or IsEmpty(data(0, y)) Then 
      idx = y 
      Exit For 
      End If 
     Next 

     'No duplicate found need to add a new element to the array. 
     If idx = -1 Then 
      idx = UBound(data, 2) + 1 
      ReDim Preserve data(1, idx) 
     End If 
     data(0, idx) = a2(0) 
     If IsEmpty(data(1, idx)) Then 
      data(1, idx) = a2(1) 
     Else 
      data(1, idx) = Join(Array(data(1, idx), a2(1)), ",") 
     End If 
     End If 
    Next 
    End If 
    DeserialiseToCustomArray = data 
End Function 

'Function takes a 2D array built from DeserialiseToCustomArray() and 
'serialises it into a custom string in the form <index>,<value>, ... | ... 
Function SerialiseArray(data) 
    Dim x, y 
    Dim str: str = Empty 
    If IsArray(data) Then 
    For y = 0 To UBound(data, 2) 
     If y > 0 And y <= UBound(data, 2) Then str = str & "|" 
     str = str & data(0, y) & "," & data(1, y) 
    Next 
    End If 
    SerialiseArray = str 
End Function 

примеры Пара использования:

Dim str: str = "58|270,58|271,58|272,59|270,59|271,59|272" 
Dim data, result 

data = DeserialiseToCustomArray(str) 
result = SerialiseArray(data) 
WScript.Echo "input: " & str 
WScript.Echo "output: " & result 

Выход:

Result: 58,270,271,272|59,270,271,272 
Dim str: str = "58|270,58|271,58|272,59|270,59|271,59|272,60|345,61|345,58|270,60|200" 
Dim data, result 

data = DeserialiseToCustomArray(str) 
result = SerialiseArray(data) 
WScript.Echo "input: " & str 
WScript.Echo "output: " & result 

Выход:

Result: 58,270,271,272,270|59,270,271,272|60,345,200|61,345 

Примечание: При использовании этих примеров в классическом ASP удалите WScript.Echo и замените на Response.Write.

+1

э-э-э-э-э-э-э-э-э-э-э ... потому что вы не спешите пытаться решить мою проблему .. я действительно ценю это ... это то, что мне нужно. – user2752718

0

Обычным способом, чтобы получить уникальные элементы из массива положить их как ключи в Dictionary:

a = Array(58, 270, 271, 272, 270, 271, 272) 

Set d = CreateObject("Scripting.Dictionary") 
For Each i In a 
    d(i) = True 'value can be anything, relevant is using i as key 
Next 

WScript.Echo Join(d.Keys, ",") 'Output: 58,270,271,272 
Смежные вопросы