C# 当某个字符串作为第一个或最后一个元素存在时,如何使用linq从数组中删除该字符串

C# 当某个字符串作为第一个或最后一个元素存在时,如何使用linq从数组中删除该字符串,c#,linq,C#,Linq,如果我有如下数组 var testArray = new string[] {"??", "??", "FF", "5B", "??", "01", "??" }; { "FF", "5B", "??", "01" }; 如何使用linq删除阵列开头和结尾出现的所有“??”元素 例如,在本例中,我希望以如下所示的数组结束 var testArray = new string[] {"??", "??", "FF", "5B", "??", "01", "??" }; { "FF", "5B

如果我有如下数组

var testArray = new string[] {"??", "??", "FF", "5B", "??", "01", "??" };
{ "FF", "5B", "??", "01" };
如何使用linq删除阵列开头和结尾出现的所有
“??”
元素

例如,在本例中,我希望以如下所示的数组结束

var testArray = new string[] {"??", "??", "FF", "5B", "??", "01", "??" };
{ "FF", "5B", "??", "01" };
我知道删除所有出现的
“?”
非常容易,但我基本上只想删除
“?”
,因为它们位于数组的开头或结尾


如何使用linq实现这一点?

仅使用linq,您就必须使用SkipWhile和Reverse,但这是有代价的。您需要反转阵列两次

var r = testArray.SkipWhile(x=>x.Equals("??"))
                 .Reverse()
                 .SkipWhile(x=>x.Equals("??"))
                 .Reverse();

首先,获取
“?”
的所有索引,然后在列表中循环以删除第一个和最后一个元素(如果有)

var testArray=新字符串[]{“?”,“?”,“FF”,“5B”,“?”,“01”,“?”};
var newList=新列表(testArray);
//获取所有“?”索引
int[]index=testArray.Select((b,i)=>b==“?”?i:-1)。其中(i=>i!=-1)。ToArray();
对于(inti=index.Length-1;i>=0;i--)
{
//仅当元素是第一个或最后一个元素时才删除该元素
if(索引[i]==0 | |索引[i]==testArray.Length-1)
{
RemoveAt(索引[i]);
}
}

为了避免遍历整个数组,我建议将其转换为
列表
,然后检查第一个和最后一个元素

var testArray = new string[] { "??", "??", "FF", "5B", "??", "01", "??" }.ToList();

if (testArray.First().Equals("??"))
    testArray.RemoveAt(0);
if (testArray.Last().Equals("??"))
    testArray.RemoveAt(testArray.Count - 1);

简单快速

        var testArray = new string[] { "??", "??", "FF", "5B", "??", "01", "??" };
        List<String> list = testArray.ToList();

        //Remove "??" from starting
        for (int i=0;i< list.Count;i++)
        {
            if(list[0]!= "??")
            {
                break;
            }
            list.RemoveAt(0);
        }

        //Remove "??" from ending
        for (int i = list.Count; i > 0; i--)
        {
            if (list[list.Count-1] != "??")
            {
                break;
            }
            list.RemoveAt(list.Count-1);
        }
var testArray=新字符串[]{“?”,“?”,“FF”,“5B”,“?”,“01”,“?”};
List=testArray.ToList();
//从起始位置移除“?”
for(int i=0;i0;i--)
{
如果(列表[list.Count-1]!=“?”)
{
打破
}
list.removet(list.Count-1);
}

同意,LINQ不是这个问题的最佳解决方案。这个问题可能来自家庭作业。我明白了。有没有更有效的方法来使用for循环呢?@brandonminick不是一个家庭作业问题。我正在尝试清理用户输入,以防他们将“?”放在输入的前面或后面。使用两个if语句执行此操作比在数组中迭代两次更有效:if(testArray.First().Equals(“?”)和if(testArray.Last().Equals(“?”)