从 List<string[]> 中删除项目或获取任何位置的任何项目的索引
Remove item from List<string[]> or get index of any item at any position
我正在尝试从 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) 作为结果...如果我可以获得该问题的索引,那么我的问题就可以解决...请帮助我。
比较数组时必须使用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 来比较集合。
我正在尝试从 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) 作为结果...如果我可以获得该问题的索引,那么我的问题就可以解决...请帮助我。
比较数组时必须使用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 来比较集合。