c# where 子句,而不是 for 循环

c# where clause, instead of for loop

在我的 C# Form 脚本中,我有一个包含大约 2-3k 个元素的数组。我需要在该数组中找到一个特定的值,但不对其应用循环。通过 2-3k 元素循环会导致几秒钟的延迟,我不希望这样。这类似于网站的 Mysql 数据库。

在 PHP 网站中,我在索引数据库上使用 where 子句,所以即使 table 有 100 万行,我也能够在 0.020 秒内获得我需要的唯一行。 C# 有类似的东西吗?

这是我想要实现的目标。

using System;
using System.Linq;
                    
public class Program
{
    public static float[] data = {140, 160, 170, 180, 190, 54235243,234,4213,1234,543,1234,3215,52134,1234,222,333,444,555,666,777,888,999};
    
    public static void Main()
    {
        var queryLowNums =
            from num in data
            where num > 140 and num < 170
            select num;
        
        // num should be 160
        
    }
}

上面的代码无效,我只是想举例说明我想做什么。在这种情况下,有没有这样的 syntax/command 或其他任何可以帮助我的东西。循环遍历 2-3k 个元素可能需要 1 秒或 2 秒 idk。我知道如果我有给定元素的索引,它会直接加载它而不需要 for 循环。但是不知道如何实现。

试试这个

 
    float[] data = { 140, 160, 170, 180, 190, 54235243, 234, 4213, 1234, 543, 1234, 3215, 52134, 1234, 222, 333, 444, 555, 666, 777, 888, 999 };

    float queryLowNums = 0;
    var startIndex = 0;
    Parallel.For(startIndex, data.Length, (j, state) =>
   {
       if (data[j] > 140 && data[j] < 170)
       {
           queryLowNums = data[j];
           state.Break();
       }
   });

输出

160

或者如果您需要多个号码

    var primeNumbers = new ConcurrentBag<float>();

    Parallel.ForEach(data, number =>
    {
       if (number > 140 && number < 170)
        {
            primeNumbers.Add(number);
        }
    });

使用散列 table 会快得多,但在您的情况下,如果您没有散列,则查找项目所需的时间比创建散列 table 所需的时间更少(如果有)不存在。排序算法也一样。

使用列表

var list = new List<float>() { 140, 160, 170, 180, 190 };
var index = list.IndexOf(160);

 var values = list.Where(x=>x > 140 && x < 190); //it`s work very fast