我有一个包含Integer值和String的List。例如
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 :(得分:0)
您可以使用<div class="form-group">
<label for="email" class="col-sm-3 control-label">Logo</label>
<div class="col-sm-7">
<input type="file" name="logo" id="logo" placeholder="Logo" autofocus="" required="" class="form-control">
</div>
</div>
<div class="form-group">
<label for="address" class="col-sm-3 control-label">Address</label>
<div class="col-sm-7">
<textarea name="address" id="address" placeholder="Address" required="" class="form-control"></textarea>
</div>
</div>
与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
获取每个子字符串的{StartPos,EndPos}索引列表。
话虽如此,我建议考虑使用正则表达式来提取子字符串。您的示例中的内容可以通过简单的Zip()
轻松获取,因此您最终会获得非常紧凑的代码:
\w+
注意:不要忘记添加Dim Str = "|Field1, Field2; Field26"
Dim output = Regex.Matches(Str, "\w+").Cast(Of Match)().Select(Function(m) m.Value).ToList()
。
如果您的子字符串模式更复杂,我们可能会进一步详细说明正则表达式。