2015-01-20 95 views
0

字符串列表,这是我有:LINQ创建从存储在INT指数[]

int[] indexes; // it contains indexes that are "good" 
string[] words; // many words 
List<string> result; 

而且我想这样做代码:

​​

在只有一条线,由LINQ我猜:)如何?

回答

7

假设一组不同的索引。我们可以抓住每个单词,而不是从单词开始,找到匹配的索引。

List<string> result = indexes.Select(i => words[i]).ToList(); 

请注意,假设索引小于单词,此版本更快。 (100个指标和20000个单词将在您的2000万次操作和100个在我的操作)。

+0

这不会让你有' IEnumerable '?仍然需要.ToList()? – 2015-01-20 20:06:16

+2

@EricJ .:问了一个List,但我发现人们倾向于要求他们算法的功能,而不是他们真正需要什么。修正以匹配问题。 – Guvante 2015-01-20 20:07:24

+0

同意,当接口提供更好的代码重用时,人们通常使用具体类而不是接口。 – 2015-01-20 20:13:00

1

嗯,不是一个衬垫,但是:

result = Enumerable.Range(0, words.Count()) 
     .Where(indexes.Contains) 
     .Select(idx => words[idx]) 
     .ToList(); 
+0

你可以完全写在一行:-) – 2015-01-20 20:02:25

+0

什么处理与Where(indexes.Contains)'?认为你必须写'Where(w => indexes.Contains(w))''。 – 2015-01-20 20:03:25

+1

@EricJ .:只要函数类型匹配有效。在这种情况下,它们都是'Func '。 – Guvante 2015-01-20 20:04:20