如何使用linq从列表中的列表中选择某些字符串(按索引)

本文关键字:列表 字符串 索引 选择 linq 何使用 | 更新日期: 2023-09-27 18:17:00

我有一个看起来像这样的对象。

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();

如何使用linq从列表中的列表中选择某些字符串(按索引)

我认为这就是您想要的(索引是请求的索引的集合(

var indexes = new List<int>() {0, 2};
var whatYouWant = strings.Select(item => indexes.Select(index => item[index]).ToList())

在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);

当然,这只是一个例子,但我相信你可以根据自己的情况进行调整。

        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,/

var indexes = myObjects.Select(obj => obj.Number);
var result = test.Select(list => indexes.Select(idx => list[idx]).ToList()).ToList();

myObjectsMyObject实例的列表。