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
在我的 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