2

有没有办法在下面的查询中过滤值 -1(来自IndexOfwhen txt not found in item)?

var sortedArray = array.OrderBy (item => item.IndexOf(txt)).ToArray();

任何指针都会有所帮助。

如果我使用Where,它会使用IndexOf两次,有没有办法IndexOf只使用一次?

4

3 回答 3

3

为了避免必须做同样的IndexOf两次,你可以这样做:

var sortedArray = (from a in array
                  let i = a.IndexOf("txt")
                  where i >= 0
                  orderby i
                  select a).ToArray();
于 2013-01-21T19:53:05.583 回答
1

你可以用Where做你的谓词,然后再做OrderBy

var sortedArray =
    array.Where   (item => item.IndexOf("txt") != -1)
         .OrderBy (item => item.IndexOf("txt")).ToArray();
于 2013-01-21T19:48:08.747 回答
1

最简单的方法就是先放一个.Where()子句。

var sortedArray = array.Where (item => item.IndexOf(txt) != -1)
                       .OrderBy (item => item.IndexOf(txt))
                       .ToArray();

但是,这可能会对大型数组或数组中的大型数据造成显着的性能影响,因为您现在要搜索它两次。

于 2013-01-21T19:48:53.237 回答