从列表或者得到任意位置的任意项的索引

本文关键字:任意 位置 任意项 索引 或者 列表 string | 更新日期: 2023-09-27 17:54:47

我正试图从List<string[]>中删除项目,但删除属性不工作,但如果我使用RemoveAt(0)(任何int硬编码值),那么它正在工作…有什么问题吗?有人能帮我吗?

这是我的代码…

List<string[]> ipcol1 = new List<string[]>();
ipcol1.Add(new string[] { "test1" });
ipcol1.Add(new string[] { "test2" });
ipcol1.Add(new string[] { "test3" });
ipcol1.Add(new string[] { "test4" });
ipcol1.Remove(new string[] { "test1" });
int i = ipcol1.IndexOf(new string[] { "test4" });
ipcol1.RemoveAt(i);

或者如果我试图对特定项目进行索引,那么它会给我(-1)作为结果…如果我能得到这个问题的索引,那么我的问题就能解决了。

从列表<string[]>或者得到任意位置的任意项的索引

在比较数组时必须使用SequenceEqual:

  List<string[]> ipcol1 = new List<string[]>();
  ipcol1.Add(new string[] { "test1" });
  ipcol1.Add(new string[] { "test2" });
  ipcol1.Add(new string[] { "test3" });
  ipcol1.Add(new string[] { "test4" });
  ipcol1.RemoveAll(array => array.SequenceEqual(new string[] { "test1" }));

或者(如果您想要删除数组中包含"test1"的任何记录):

  ipcol1.RemoveAll(array => array.Any(item => item == "test1")));

原因是如果两个数组具有相同的引用:

,则它们是相等的。
  string[] array1 = new string[0];
  string[] array2 = array1;
  string[] array3 = new string[0];
  // "Yes" - array1 and array2 reference to the instance
  Console.WriteLine((array1 == array2) ? "Yes" : "No");
  // "No" - array1 and array3 are references to different instances
  Console.WriteLine((array1 == array3) ? "Yes" : "No");
  // "Yes" - array1 and array3 are equal sequences
  Console.WriteLine((array1.SequenceEqual(array3)) ? "Yes" : "No");

数组是引用类型。下面的代码失败了,因为您正在比较两个独立实例的引用。

ipcol1.Remove(new string[] { "test1" });

你可以使用SequenceEqual来比较集合