使用LINQ从String数组中删除“NULL行”
如何使用LINQ从String数组中删除“NULL行”?
采用这种结构( String[,]
):
"Hello", "World", "Foo", "Bar" null, null, null, null null, null, null, null "Hello", "World", "Foo", "Bar" "Hello", "World", "Foo", "Bar" null, null, "Foo", "Bar"
应删除第一行之后的两行。 结构中的最后一行不应该。
例如,如果列表中有数组,则可以执行以下操作:
IList l = new List { new []{ "Hello", "World", "Foo", "Bar" }, new string[]{ null, null, null, null }, new string[] { null, null, null, null }, new [] { "Hello", "World", "Foo", "Bar" }, new [] {null, null, "Foo", "Bar" } }; var newList = l.Where(a => a.Any(e => e != null));
(更新)
我不认为Linq会为你提供多维数组的帮助。 这是一个使用普通旧for循环的解决方案……
string[,] arr = new string[,] { { "Hello", "World", "Foo", "Bar" }, { null, null, null, null }, { null, null, null, null }, { "Hello", "World", "Foo", "Bar" }, {null, null, "Foo", "Bar" } }; IList l = new List(); for (int i = 0; i < arr.GetLength(0); i++) { string[] aux = new string[arr.GetLength(1)]; bool isNull = true; for (int j = 0; j < arr.GetLength(1); j++) { aux[j] = arr[i, j]; isNull &= (aux[j] == null); } if (!isNull) l.Add(aux); }
这导致List
。
不可能这样做,数组是固定大小,你需要一个新的数组,列表或集合可以用这种方式删除。
数组不能。 你需要在那些行中有东西。
任何调用类似toArray()的解决方案都在构造一个你特别要求不会发生的数组。