复合类型LIST如何取元素?

antinet 2011-07-05 02:58:05
如下定义:
public List<List<int>> GridsArry = new List<List<int>>();

第1次,向队列中增加序列1,3,5,7;,然后将这个序列增加到GridsArry;
第2次又增加序列8,9,10,再将这个序列增加到GridsArry
此时,可以用COUNT方法得到有2个序列,但怎么分别取这个序列的元素呢?
...全文
304 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
jshzp 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 antinet 的回复:]
看错了,现在项目是.NET FRAMEWORK2.0,设成3.5可以了
[/Quote]
吼吼,楼主辛苦,可把您累坏了!
antinet 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 fangxinggood 的回复:]
grids.Clear();

grids 和 ga[0] 是同一引用。

再一次 ga.Add(grids) 就变成 ga[0], ga[1] 是同一个引用。

所以不要搞 grids.Clear();

而是要再定义一个容器 List<int> grids_2 = new List<int>();
再加。
[/Quote]
没明白,grids和ga[0]怎么是同一引用?再定义个一个容器grids_2,然后ga.Add(grids_2)?
那后续的第3,第4个队列呢?
antinet 2011-07-05
  • 打赏
  • 举报
回复
看错了,现在项目是.NET FRAMEWORK2.0,设成3.5可以了
机器人 2011-07-05
  • 打赏
  • 举报
回复
grids.Clear();

grids 和 ga[0] 是同一引用。

再一次 ga.Add(grids) 就变成 ga[0], ga[1] 是同一个引用。

所以不要搞 grids.Clear();

而是要再定义一个容器 List<int> grids_2 = new List<int>();
再加。
q107770540 2011-07-05
  • 打赏
  • 举报
回复
.NET FRAMEWORK 4.0 没有LINQ? 谁说的?
antinet 2011-07-05
  • 打赏
  • 举报
回复
我时.NET FRAMEWORK 4.0,没有LINQ,另外,通过如下程序
List<int> grids = new List<int>();
List<List<int>> ga = new List<List<int>>();

grids.Add(10);
grids.Add(13);
grids.Add(14);
ga.Add(grids);

grids.Clear();

grids.Add(7);
grids.Add(8);
ga.Add(grids);

可以验证,用2次ADD方法向List<List<int>>中增加一个数列,第2次的会覆盖第一次的。
List<List<int>>貌似是个2维数组,后一个ADD方法将导致维数重新调整,从而丢失前面的数据
itliyi 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bdmh 的回复:]
遍历GridsArry,其中每个元素都是List<int>,然后每个元素还可以取索引
foreach(List<int> list in GridsArry)
{
foreach(int i in list)
{
......
}
}
[/Quote]Y
antinet 2011-07-05
  • 打赏
  • 举报
回复
string ss = "";
foreach (int gg in Grids)
{
ss = ss + gg.ToString() + " ";
}
MessageBox.Show(ss,"共"+Grids.Count.ToString() + "个grid被选中");
//***上面可以正确的显示出当前Grids的整数序列
//** 下面,将Grids这个序列追加到GridsArry,用foreach 发现,每次都是最后一个序列追加进去,前面的被覆盖

//** 然后将这个LIST追加到LIST
if (Grids.Count > 0)
{
GridsArry.Add(Grids);

int i = 0;

MessageBox.Show("共 " + GridsArry.Count.ToString() + " gridarry", "");

//GridsArry.Select
foreach (List<int> gd in GridsArry)
{
ss = "";
foreach (int a in gd)
{
ss = ss + a.ToString() + " ";
}
MessageBox.Show(ss, "第" + i.ToString() + "区");
i++;
}

//MessageBox.Show(ss, "第" + i.ToString() + "区");

}

q107770540 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 antinet 的回复:]

另外,在C#,VS2010中,没有SELECTMANY这个方法吧?
[/Quote]
Using System.Linq

http://msdn.microsoft.com/en-us/library/bb534336.aspx
antinet 2011-07-05
  • 打赏
  • 举报
回复
另外,在C#,VS2010中,没有SELECTMANY这个方法吧?
moonwrite 2011-07-05
  • 打赏
  • 举报
回复
你干什么要用个这样的类型
不试试字典什么的???
antinet 2011-07-05
  • 打赏
  • 举报
回复
//** 然后将这个LIST追加到LIST
if (Grids.Count > 0)
{
GridsArry.Add(Grids);

int i = 0;

MessageBox.Show("共 " + GridsArry.Count.ToString() + " gridarry", "");

foreach (List<int> gd in GridsArry)
{
ss = "";
foreach (int a in gd)
{
ss = ss + a.ToString() + " ";
}
MessageBox.Show(ss, "第" + i.ToString() + "区");
i++;
}

//MessageBox.Show(ss, "第" + i.ToString() + "区");

}
这样每次将整数序列追加到当前序列,但跟踪显示LIST<LIST>里面只有最后一次追加的内容,前面的被覆盖。但LIST<LIST>却能正确的计算出 有几个序列
flyerwing 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fangxinggood 的回复:]
GridsArry[0], GridsArry[1]
[/Quote]
GridsArry[0][0]
GridsArry[1][0]
这样估计也成吧.
q107770540 2011-07-05
  • 打赏
  • 举报
回复

void Main()
{
List<List<int>> GridsArry = new List<List<int>>{
new List<int>{1,2,3,4},
new List<int>{5,6,7,9}
};
GridsArry.SelectMany(s=>s).ToList().ForEach(s=>Console.WriteLine(s)); //8
/*
1
2
3
4
5
6
7
9

*/
}
q107770540 2011-07-05
  • 打赏
  • 举报
回复
.SelectMany()
antinet 2011-07-05
  • 打赏
  • 举报
回复
private void SaveList(List<List<int>> ls)
{
string ss = "";
int i = 0;

MessageBox.Show("共 " + ls.Count.ToString() + " grid", "");

foreach (List<int> gd in ls)
{
ss = "";
foreach (int a in gd )
{
ss = ss + a.ToString() + " ";
}
MessageBox.Show(ss, "第" + i.ToString() + "区");
i++;
}

}
这样显示出来的都是最后一次追加的序列
bdmh 2011-07-05
  • 打赏
  • 举报
回复
遍历GridsArry,其中每个元素都是List<int>,然后每个元素还可以取索引
foreach(List<int> list in GridsArry)
{
foreach(int i in list)
{
......
}
}
机器人 2011-07-05
  • 打赏
  • 举报
回复
GridsArry[0], GridsArry[1]
代码转载自:https://pan.quark.cn/s/2af55a97eb0f **INA226测试程序参考** 在电子工程和嵌入式系统开发领域,INA226被认为是一款高精度且低功耗的电流与电源监控器,其应用范围广泛,涵盖电池管理系统、电源路径管理以及智能能源监测等多个方面。该芯片由德州仪器(Texas Instruments)负责生产,能够提供精确的电流和电压测量结果,并具备灵活的配置选择。 **INA226芯片功能详解** INA226的核心特性包括: 1. **双向电流测量**:能够测量流经设备的正向电流和反向电流。 2. **高压和低压测量**:支持高达60V的电压测量,同时可以测量从微安到安培范围内的电流。 3. **内置模拟电路**:集成了一个精密运算放大器、一个电流检测放大器以及一个高精度电压基准。 4. **I2C接口**:通过标准的I2C接口与微控制器进行通信,便于读测量数据。 5. **多种配置模式**:允许选择不同的电流和电压范围,以适应不同应用场景的需求。 6. **低功耗**:在待机状态下,功耗非常低,适合用于电池供电的设备。 **平台IO与ESP8266开发环境** `PlatformIO`是一个开源的跨平台集成开发环境,专注于物联网(IoT)项目的开发。它整合了构建系统、库管理和设备支持,显著简化了嵌入式开发流程。`ESP8266`是由乐鑫科技推出的一款低成本且高性能的Wi-Fi微控制器,常用于智能家居和物联网领域。 在`PlatformIO`中配置和编写针对`ESP8266`的INA226测试程序,需要遵循以下步骤: 1. **安装PlatformIO**:在IDE(例如Visual Studio Code、Atom等...
已经博主授权,源码转载自 https://pan.quark.cn/s/6b24333d46cf 这里所说的激光扫描测距仪的实质就是3D激光雷达。 如上面视频中展现的那样,扫描仪可 以获各转角情况下目标物体扫描截面到扫描仪的距离,由于这类数据在可视化后看起来像 是由很多小点组成的云团,因此常被称之为:点云(PointClould)。 在获得扫描的点云后,可以在计算机中重现扫描物体/场景的三维信息。 自制激光3D扫描仪的知识点涵盖了多个方面,包括激光雷达的基本概念、激光扫描测距的原理、以及如何低成本实现3D激光扫描。 以下是对这些知识点的详细阐述。 激光雷达是一种通过激光测距获物体表面信息的设备。 它通常用于机器人导航、3D模型重建和地图测绘等领域。 激光雷达能够获目标物体在各个转角情况下的扫描截面到扫描仪的距离,并将这些数据可视化成点云(Point Cloud)。 点云是由大量小点组成的三维数据模型,这些小点模拟了物体或场景的三维结构。 在制造激光3D扫描仪时,需要考虑的关键原理包括激光三角测距原理和线状激光进行截面测距的原理。 激光三角测距原理是指通过测量发射激光与反射激光之间的角度差异来确定距离。 而线状激光进行截面测距原理则是指将点状激光改变成线型光束,一次性获得整个扫描截面的数据。 市面上的激光雷达产品价格昂贵,主要因素包括使用高速光学振镜进行大角度扫描、通过计算发射/反射激光束相位差的测距手段、以及矫正算法和人工成本。 但个人DIY自制激光雷达时,可以通过降低对精度和性能的要求来大幅降低成本。 例如,使用三角测距方式替代成本较高的TOF测距方式,或者使用普通电机机构驱动激光器来替代高速振镜。 自制激光3D扫描仪的实现,可以考虑制作一个能够测量一个点的设备,并采用类似的三角测距...

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧