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(“?”)