【问题标题】:Improve the LINQ query returning indexes of items meeting a certain condition改进满足特定条件的项目的LINQ查询返回索引
【发布时间】:2012-05-02 11:42:41
【问题描述】:

我有这个 LINQ 查询,它返回数组中所有项目的索引,其时间值(即double)满足以下查询中的特定条件。

var sonicIndices = completeLog.Select((item, index) => new { Item = item, Index = index })
            .Where(x => Math.Abs(x.Item.time - nullValue) > 0.001)
            .Select(item => item.Index).ToArray();

我很确定这可以改进,但是如何改进呢?我难住了。任何人都可以帮助我吗?

【问题讨论】:

  • 这看起来很适合老式 for 循环
  • @DaveBish:是的,你可能是对的。但我想提高我在 LINQ 方面的专业知识(现在非常低),这就是我问的原因。
  • @Aamir:为什么你认为这可以改进?这看起来很简单。
  • 对我来说基本上看起来还不错。
  • @TimSchmelter:嗯...只是因为这看起来很恶心/令人费解:) 所以你想说这无法改进?

标签: c# linq c#-4.0


【解决方案1】:

我认为这没有什么特别的问题,它需要在哪些方面变得更好? 如果您想为这种种类事物提供可重用的方法,请参阅:Getting a collection of index values using a LINQ query

【讨论】:

    【解决方案2】:

    不是改进,只是做同样事情的另一种方式:

    var sonicIndices = Enumerable.Range(0, completeLog.Length)
                       .Where(i => Math.Abs(completeLog[i].time - nullValue) > 0.001)
                       .ToArray();
    

    【讨论】:

    • 漂亮 - 避免创建匿名对象。 +1
    猜你喜欢
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多