我有一个看起来像这样的对象。
List<List<string>> MyData;
内部List<string>
可以包含未定义数量的字符串,但数字始终大于0
在另一个对象中,我有我想要选择的字符串的索引号。
索引号位于MyObject.Number;
如何只获得给定索引中存在字符串的List<List<string>>
对象?
我尝试了以下内容:
List<List<string>> test = new List<List<string>>();
List<MyObject>.ForEach(p => test.Add(MyData.Select(q => q[p.Number]).ToList()));
由于列表中的字符串是单独的列表,因此效果不佳。
例:
我收到了List
,其中包含100个List<string>
。 List<string>
包含5个字符串。
List<MyObject>
告诉我他有索引0和2.
我试过的代码返回给我一个列表,里面有两个列表。第一个列表包含List<string>
的0位置中的所有字符串,第二个列表列出List<string>
的2位置中的所有字符串。
我想要一个包含100个列表的列表,并在每个列表中包含2个字符串。
请帮我解决这个问题。
如果需要,请随时提出更多信息。
解决方案:
List<List<string>> MyResult = MyData.Select(l => MyObjects.Select(p => p.Number).ToList().Select(i => l[i]).ToList()).ToList();
答案 0 :(得分:4)
我认为这就是你想要的(索引是所请求索引的集合)
var indexes = new List<int>() {0, 2};
var whatYouWant = strings.Select(item => indexes.Select(index => item[index]).ToList())
答案 1 :(得分:2)
在linq中你可以传递两个参数,第二个参数是整数,索引号是当前元素。
List<string> strings = new List<string>();
strings.Where((s, i) => i == indexToLookFor).Select(s => s);
通过这种方式,您可以轻松返回包含您要查找的索引的项目。在你的情况下,你可以使用这样的东西:
strings.Where((s, i) => indexes.Contains(i)).Select(s => s);
当然这只是一个例子,但我相信你可以调整它以适应你的情况。
答案 2 :(得分:1)
var lists = new List<List<string>>
{
new List<string> { "1", "2", "3", "4" },
new List<string> { "5", "6", "7", "8" },
new List<string> { "9", "10", "11", "12" },
};
var indexes = new List<int> { 0, 2 };
var result = lists.Select(l => indexes.Select(i => l[i]).ToList()).ToList();
foreach (var list in result)
{
Console.Write("list:");
foreach (var elt in list)
{
Console.Write(elt + ",");
}
Console.Write(" / ");
}
输出:
list:1,3,/ list:5,7,/ list:9,11,/
答案 3 :(得分:0)
var indexes = myObjects.Select(obj => obj.Number);
var result = test.Select(list => indexes.Select(idx => list[idx]).ToList()).ToList();
myObjects
是MyObject
个实例的列表。