相关疑难解决方法(0)

对于Linq - 性能与未来

非常简短的问题.我有一个随机排序的大字符串数组(100K +条目),我想找到所需字符串的第一次出现.我有两个解决方案.

从我读到我可以猜到的是'for循环'目前会提供略微更好的性能(但这个余量总是会改变),但我也发现linq版本更具可读性.总的来说哪种方法通常被认为是目前最好的编码实践,为什么?

string matchString = "dsf897sdf78";
int matchIndex = -1;
for(int i=0; i<array.length; i++)
{
    if(array[i]==matchString)
    {
        matchIndex = i;
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

int matchIndex = array.Select((r, i) => new { value = r, index = i })
                         .Where(t => t.value == matchString)
                         .Select(s => s.index).First();
Run Code Online (Sandbox Code Playgroud)

c# linq performance

36
推荐指数
3
解决办法
3万
查看次数

在排序列表中搜索值时如何节省CPU周期?

CodinGame学习平台中,在C#教程中用作示例的问题之一是:

本练习的目的是检查数组中数字的存在。

规格:这些项目是按升序排列的整数。该阵列最多可包含一百万个项目。该数组从不null。实现方法boolean Answer.Exists(int[] ints, int k)以便返回true是否k属于ints的方法,否则方法应该返回false

重要说明:尽可能节省CPU周期。

例:

int[] ints = {-9, 14, 37, 102};
Run Code Online (Sandbox Code Playgroud)

Answer.Exists(ints, 102)返回true
Answer.Exists(ints, 36)返回false

我的建议是这样做:

using System;
using System.IO;

public class Answer
{
    public static bool Exists(int[] ints, int k)
    {
        foreach (var i in ints)
        {
            if (i == k)
            {
                return true;
            }

            if (i > k)
            {
                return false;
            }
        }

        return …
Run Code Online (Sandbox Code Playgroud)

c# optimization binary-search

4
推荐指数
1
解决办法
3276
查看次数

标签 统计

c# ×2

binary-search ×1

linq ×1

optimization ×1

performance ×1