有什么理由我应该使用string.charAt(x)而不是括号表示法string[x]吗?
我有人被告知,因为.net linq是如此之慢,我们不应该使用它,并且想知道其他人是否得出了相同的结论,例如:
花了1443ms做了1000000000比较非LINQ.
花了4944ms与LINQ做了1000000000比较.
(慢243%)
非LINQ代码:
for (int i = 0; i < 10000; i++)
{
    foreach (MyLinqTestClass1 item in lst1) //100000 items in the list
    {
        if (item.Name == "9999")
        {
            isInGroup = true;
            break;
        }
    }
}
花了1443ms做了1000000000比较非LINQ.
LINQ代码:
for (int i = 0; i < 10000; i++)  
    isInGroup = lst1.Cast<MyLinqTestClass1>().Any(item => item.Name == "9999");  
花了4944ms与LINQ做了1000000000比较.
我想它可以优化LINQ代码,但想到的是它很容易得到非常慢的LINQ代码,并且考虑到它不应该被使用.鉴于LINQ很慢,那么PLINQ也会很慢,NHibernate LINQ会很慢,所以不应该使用LINQ语句中的任何类型.
有没有人发现LINQ是如此之慢以至于他们希望从未使用它,或者我是否根据这样的基准做出了过于笼统的结论?
我有一个1维数组,如:
var abc = ['a','a','b','a','c']
现在我想要取回所有索引'a',即0,1和3.
有没有简单的解决方案?
PS
我知道IndexOf或jQuery.inArray().但他们只返回了第一个匹配元素的索引
像indexOf之类的东西,除了我需要找到所有索引。如果有 .indexOf 和 ,lastIndexOf ,是否应该有一个函数来获取所有索引出现的情况?我找不到。
请注意,该字符串非常大,大小约为 1MB,因此我需要最快的解决方案。
为了澄清这一点,我需要获取子字符串在字符串中出现的所有位置。
例如
var str = "foo bar foo bar"; //the real string is 1MB
var indexes = str.indexOfAll('foo'); //the function I need
console.log(indexes); //should print [0,8];
我想到的一件事是在重复循环中使用indexOf,查找第一个单词,在索引处剪切字符串,然后再次使用indexOf,依此类推,直到找不到任何内容。我不确定性能(剪切和重新创建大字符串)。