在某些条件C#下创建列表的子列表
本文关键字:列表 创建 条件 | 更新日期: 2023-09-27 18:26:08
我想在某些条件下创建列表的子列表,但不知道如何创建。下面是一个例子:
假设我们有从1到5的数字,每个数字都有一个子数组。
1: 1 5 7 5 5 3 4 9
2: 0 1 2 3 4 6 3 4
3: 9 4 6 7 0 0 3 1
4: 4 6 3 7 8 0 0 1
5: 8 0 3 1 0 2 4 6
:
之后的数字我将保存在一个数组中,以便快速访问。
现在我想首先创建一个大小为5(数字1到5)的列表,并在此条件下为每个数字创建一个子列表:
if(list[i] > (arr1[j] + 1))
{
//then save it in a sublist of the index i
}
我想要的输出是这样的:
List
[1]
[5]
[7]
[5]
[5]
[2]
[4]
[9]
[2]
[4]
[6]
[4]
.
.
.
[5]
[8]
我可以通过创建第一个列表
List<int> List1 = new List<int>();
for (int i = 0; i < 5; i++)
{
List1.Add(i);
}
但是我怎样才能创建子列表呢?
更新:我尝试了
List<Tuple <int,int>> List1 = new List<Tuple <int,int>>();
但这无济于事。
您可以尝试Linq:
List<int[]> source = new List<int[]>() {
new int[] { 1, 5, 7, 5, 5, 3, 4, 9},
new int[] {0, 1, 2, 3, 4, 6, 3, 4},
new int[] {9, 4, 6, 7, 0, 0, 3, 1},
new int[] {4, 6, 3, 7, 8, 0, 0, 1},
new int[] {8, 0, 3, 1, 0, 2, 4, 6},
};
var result = source
.Select((array, index) => array
.Where(item => item > index + 2) // +2 since index is zero-based
.ToArray()); // ToArray is not necessary here, but convenient for further work
// Test
String report = String.Join(Environment.NewLine,
result.Select(item => String.Join(", ", item)));
Console.Write(report);
输出为
5, 7, 5, 5, 3, 4, 9
4, 6, 4
9, 6, 7
6, 7, 8
8
编辑:对于任意索引号,我建议使用键用作索引的字典:
Dictionary<int, int[]> source = new Dictionary<int, int[]>() {
{1, new int[] { 1, 5, 7, 5, 5, 3, 4, 9}},
{2, new int[] { 0, 1, 2, 3, 4, 6, 3, 4}},
{3, new int[] { 9, 4, 6, 7, 0, 0, 3, 1}},
{4, new int[] { 4, 6, 3, 7, 8, 0, 0, 1}},
{5, new int[] { 8, 0, 3, 1, 0, 2, 4, 6}},
};
var result = source
.Select(pair => pair.Value
.Where(item => item > pair.Key + 1)
.ToArray());
尝试使用此
List<Tuple <int,List<int>>> list = new List<Tuple <int,List<int>>>();
//populate the list
if(list[i].Item1 > (arr1[j] + 1))
{
list[i].Item2.Add(arr1[j]);
}
据我所知,输入是这个
1: 1 5 7 5 5 3 4 9
2: 0 1 2 3 4 6 3 4
3: 9 4 6 7 0 0 3 1
4: 4 6 3 7 8 0 0 1
5: 8 0 3 1 0 2 4 6
输出应该是这样的:
1: 5 7 5 5 3 4 9
2: 4 6 4
3: 9 6 7
4: 6 7 8
5: 8
因此,根据小于或等于索引的索引项,应将排除在外