2016-08-03 4 views
0

У меня есть список, содержащий значения Integer и String. НапримерLinq Подстрока по индексу

DetermineDigits = {1,8,16,24} 
String = "|Field1, Field2; Field26" 

Я хочу, чтобы получить следующий вывод:

Dim output as List(Of String) = Feld1 
           Feld2 
           Feld3 

Я попытался

For i = 1 To DetermineDigits.Count - 1 
    Dim NoOfDigits As Integer = DetermineDigits(i) - DetermineDigits(i - 1) - 1 
    tmpStr = String.Substring(DetermineDigits(i - 1), NoOfDigits) 
    list.add(tmpStr) 
Next 

, который работает, но я предпочел бы использовать Linq. Есть идеи?

+0

Что такое 'ОпределитьDigits' здесь? –

+0

это список целых чисел, где начинается следующая подстрока. –

+1

Я выполнил ваш код, который, как вы говорите, работает, - и выбрал '{" Field1 "," Field2 "}'. В начале второй строки есть пробел, и нет третьей строки. Можете ли вы прояснить, является ли пример вывода то, что вам нужно, или если код «работает» правильный? – Enigmativity

ответ

0

Вы можете использовать Enumerable.Range() в сочетании с Select() перебирать DetermineDigits индексов:

Dim DetermineDigits = {1, 8, 16} 
Dim Str = "|Field1, Field2; Field26" 
Dim pos = DetermineDigits.Concat(New Integer() {Str.Length}).ToArray() 

Dim output = Enumerable.Range(1, pos.Count() - 1) _ 
    .Select(Function(i) Str.Substring(pos(i - 1), pos(i) - pos(i - 1))) 

вид pos массива, который является DetermineDigits с последним концом подстроки позиции добавлен к нему. Без этого дополнения вам не хватает последней подстроки.

В качестве альтернативы вы можете использовать Zip(), чтобы получить список индексов {StartPos, EndPos} для каждой вашей подстроки.


Это, как говорится, я предлагаю использовать регулярное выражение для извлечения подстрок. Те, в вашем примере, может быть легко схватил с простой \w+, так что вы будете в конечном итоге с довольно компактный код:

Dim Str = "|Field1, Field2; Field26" 
Dim output = Regex.Matches(Str, "\w+").Cast(Of Match)().Select(Function(m) m.Value).ToList() 

NB: Не забудьте добавить Imports System.Text.RegularExpressions.

Если ваш шаблон подстроки более сложный, мы можем дополнительно разработать регулярное выражение.

Смежные вопросы