我有一个二维数组,其值如下:
[0,1] = "A"
[0,2] = "A"
[0,3] = "A"
[0,4] = "A"
[0,5] = "A"
....
[1,0] = "1"
[1,1] = "2"
[1,2] = "3"
...
[2,0] = "N"
[2,1] = "N"
[2,2] = "N"
[2,3] = "N"
... So on.
有没有办法将其转换为3个单独的列表,如list1将具有[0,1] [0,2]的所有值......等等。和List2的值为[1,0] [1,1] ......等等。我试过这个:
List<string> cList = class.KVal.Cast<string>().ToList();
这给了我一个列表,但它不可用,因为我无法对此进行操作,因为它已将所有值存储在一个列表中。
我正在尝试以下代码:
var theList = Enumerable.Range(0, table.KVal.GetLength(1) - 1)
.Where(i=> table.KVal[0, i].Contains("A"))
.ToList();
而且我得到了所有的A值,我希望它是从下一个2d数组中获取值的基本索引,如上所述,代码从1开始获取值。我希望它获得完全相同的值上面的代码得到了。
所以我这样做:
var index = Enumerable.Range(0, table.KVal.GetLength(1) - 1)
.Where(i=> table.KVal[0, i].Contains("A"))
.ToArray();
我不确定如何实现此数组以获取其他值。
答案 0 :(得分:2)
您始终可以使用Enumerable.Range
:
var list1 = Enumerable
.Range(1, table.KVal.GetLength(1) - 1) // if you want to start at [0, 1]
.Select(i => table.KVal[0, i])
.ToList();
var list2 = Enumerable
.Range(0, table.KVal.GetLength(1)) // if you want to start at [1, 0]
.Select(i => table.KVal[1, i])
.ToList();
等等。
请注意,您实际上可以使用此技术使用 n 迭代器遍历数组:
var results =
from x in Enumerable.Range(0, table.KVal.GetLength(0))
from y in Enumerable.Range(0, table.KVal.GetLength(1))
select table.KVal[x, y];
这是一个非常简单的示例,但它说明了如何在单个Linq查询中访问多维数组。