获取列表中两个特定值之间的所有值

时间:2019-07-03 08:42:51

标签: c# linq char

我有一个字符列表:

var myList = new List<char>(new[] { 'x', 'y', '(', 'a', 'b', 'c', ')', 'z' });

具有值:

 'x'
 'y'
 '('
 'a'
 'b'
 'c'
 ')'
 'z' 

我怎样才能将花括号之间的所有值取下来?新列表中的值应如下所示:

 'a'
 'b'
 'c'

列表中大括号的索引可以在每个会话中更改。

4 个答案:

答案 0 :(得分:5)

您可以使用此LINQ表达式:

myList.SkipWhile(c => c != '(').Skip(1).TakeWhile(c => c != ')')
       ^----- 1 --------------^ ^- 2 -^ ^-------- 3 -----------^
  1. 跳过,直到找到(
  2. 跳过我们发现的(
  3. 采用元素,直到找到)(不会包含在内)

注释:

  1. 如果序列不包含起始括号,则会返回一个空序列
  2. 如果序列中没有匹配的结束括号,则将返回该序列的剩余部分

答案 1 :(得分:0)

您可以创建一个循环,如果找到的话就使用'['(方括号),然后直到找不到方括号']'为止,然后将字符添加到另一个数组中。

答案 2 :(得分:0)

您也可以按照以下步骤进行操作:

int start = myList.IndexOf('(') + 1;
int end = myList.IndexOf(')');
var result = myList.Skip(start).Take(end - start).ToList();

答案 3 :(得分:0)

var myList = new List<char>(new[] { 'x', 'y', '(', 'a', 'b', 'c', ')', 'z' });
var start = myList.FindIndex((c) => c == '(');
var end = myList.FindIndex((c) => c == ')');
if (start != -1 && end != -1 && start < end)
{
     var result = myList.GetRange(start + 1, end - start - 1));
}
else
{
    // return null or throw error
}