c#List<List<int[]>> Level2如何初始化数据
时间: 2024-09-09 20:13:22 浏览: 46
在 C# 中,`List<List<int[]>>` 是一个多级列表,它是一个列表,其中每个元素本身也是包含整数数组的列表。要初始化这样的结构,你可以按以下步骤操作:
```csharp
// 创建一个空的Level2列表
List<List<int[]>> level2 = new List<List<int[]>>();
// 可以选择直接添加一些二维数组
// 示例一:一次性添加多行数据
int[][] data1 = { new int[]{1, 2}, new int[]{3, 4} };
int[][] data2 = { new int[]{5, 6}, new int[]{7, 8} };
level2.Add(data1);
level2.Add(data2);
// 或者逐行添加
// 示例二:逐行添加
List<int[]> row1 = new List<int> { 1, 2 };
List<int[]> row2 = new List<int> { 3, 4 };
level2.Add(row1);
row1 = new List<int> { 5, 6 };
level2.Add(row1);
// 同理,可以继续添加更多的行
// 初始化完成后,level2就包含了多维的整数数组
相关问题
c# List<List<int[]>> Level2如何初始化并赋值
在 C# 中,`List<List<int[]>> Level2` 表示一个二维列表,其中每个元素都是一个整数数组的一维列表。这种数据结构可以用于存储多个嵌套的数组集合。要初始化并赋值给这个二维列表,你可以按照以下步骤操作:
```csharp
// 创建一个新的二维列表
List<List<int[]>> level2 = new List<List<int>>();
// 定义一些整数数组作为一级列表的内容
List<int>[] array1 = new int[] {1, 2, 3};
List<int>[] array2 = new int[] {4, 5, 6};
List<int>[] array3 = new int[] {7, 8, 9};
// 将这些数组添加到一级列表中
level2.Add(array1);
level2.Add(array2);
level2.Add(array3);
// 如果需要更多嵌套数组,可以在第一级列表中继续添加
List<int[]> innerArray4 = new int[] {10, 11, 12};
level2.Add(innerArray4);
现在游戏中需要实现一个“快速选择”(右图标识1)的功能,自动帮助用户选择出兵数量,需求如下: 资源地的资源量是有上限的(右图标识2处的分母值),若士兵数量充足,尽量把资源拉完,且尽量减少派兵数量; 单次出兵的数量也是有限制的(右图标识3处的分母值),派出的士兵数量不能超过这个限制; 请使用熟悉的程序语言,实现这样的函数 输入参数:资源地load上限,出兵数量上限,拥有的士兵种类列表 返回值:自动选择出来的士兵列表(士兵类型,数量) 函数定义:List<TroopItem> QuickSelectTroopList(int res_max, int march_size_max, List<TroopItem> own_troop_list) 士兵结构定义如下: struct TroopItem { int id; int type; int level; int load; int force; int own_num; int select_num; }
下面是使用 C# 语言实现这个函数的示例代码:
```csharp
List<TroopItem> QuickSelectTroopList(int res_max, int march_size_max, List<TroopItem> own_troop_list) {
List<TroopItem> selected_troop_list = new List<TroopItem>();
int remaining_load = res_max;
int remaining_march_size = march_size_max;
own_troop_list = own_troop_list.OrderBy(troop => troop.load).ToList(); // 按照载重从小到大排序
foreach (TroopItem troop in own_troop_list) {
if (remaining_load <= 0 || remaining_march_size <= 0) {
// 如果资源或者出兵数量已经用完,跳出循环
break;
}
int max_num_load = remaining_load / troop.load; // 根据载重计算可以派出的最大数量
int max_num_march_size = remaining_march_size / troop.load;
int max_num = Math.Min(troop.own_num, Math.Min(max_num_load, max_num_march_size)); // 取三者中的最小值
if (max_num > 0) {
troop.select_num = max_num;
remaining_load -= max_num * troop.load;
remaining_march_size -= max_num * troop.load;
selected_troop_list.Add(troop);
}
}
return selected_troop_list;
}
```
该函数首先按照士兵的载重从小到大进行排序,这样可以优先选择载重小的士兵。然后遍历每一种士兵,按照需求计算出可以派出的最大数量,并将其存储在 `select_num` 中。最后将选择出的士兵存储在 `selected_troop_list` 中并返回。注意需要在循环中判断资源或者出兵数量是否已经用完,如果用完了就跳出循环。
阅读全文