【发布时间】:2014-07-08 09:40:09
【问题描述】:
我有两个列表,我以这种方式分配其中一个:
var query = Enumerable.Range(0, 1440).Select((n, index) =>
{
if ((index >= 525 && index <= 544) || (index >= 600 && index <= 749) || (index >= 810 && index <= 1079) || (index >= 1300 && index <= 1439))
return 0;
else if (index >= 1080 && index <= 1299)
return 1;
else if (index >= 545 && index <= 599)
return 3;
else if (index >= 750 && index <= 809)
return 4;
else
return 2;
}).ToList();
我的第二个列表名为 lst2。我想根据我的第一个列表查询为其分配“0”或“1”。因此,如果查询为“1”或“2”,则 lst2 的相同索引和先前为“0”值的索引应为“1”。如果查询列表是“3”或“4”,lst2 的相同索引和之前的索引为“1”值,应该是“0”。此外,如果查询的第一个索引具有“3”或“4”值,则 lst2 的相同索引应为“0”。例如;
query = {3,3,3,0,0,0,2,2,0,0,0,0,4,4,4,4,0,0,0,0,1,1,1,0,0,2,2,0,0,4,4}
lst2 = {0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0}
我该怎么做?
编辑: 如果查询的任何索引具有 3 或 4 值,则 lst2 的相同索引必须具有 0 值。如果查询的任何索引具有 3 或 4 值且前一个索引具有 0 值,则 lst2 的相同索引必须具有 0 值。同样地;如果查询的任何索引具有 1 或 2 值,则 lst2 的相同索引必须具有 1 值。如果查询的任何索引具有 1 或 2 值且前一个索引具有 0 值,则 lst2 的相同索引必须具有 1 值。
【问题讨论】:
-
该列表有 1440 个元素,在您的示例数据(
query和lst2)中,您只显示了一个摘录,对吗?一般来说,如果索引(+ 以前的索引)如此重要,LINQ 不是最佳选择。使用for-loop。 -
是的。借调。使用 for 循环并同时写入两个列表。在延迟执行或任何其他方面,您并没有从 linq 中获得太多好处,因此无需太依赖它。
-
没错。 lst2 应该具有相同的大小,这是一个摘录。我怎样才能完成?
-
我认为你应该更详细地解释你想要什么。我仍然不明白你什么时候想在 lst2 中有一个 0 或 1。也许用例会有所帮助。你可能会做一些不必要的复杂的事情;)