小编Ala*_*nay的帖子

为什么F#比C#慢得多?(素数基准)

我认为F#意味着比C#更快,我做了一个可能不好的基准测试工具,C#得到16239ms,而F#做得更差,为49583ms.有人可以解释为什么会这样吗?我正在考虑离开F#并回到C#.是否可以通过更快的代码在F#中获得相同的结果?

这是我使用的代码,我尽可能地使它成为平等.

F#(49583ms)

open System
open System.Diagnostics

let stopwatch = new Stopwatch()
stopwatch.Start()

let mutable isPrime = true

for i in 2 .. 100000 do
    for j in 2 .. i do
        if i <> j && i % j = 0 then
            isPrime <- false
    if isPrime then
        printfn "%i" i
    isPrime <- true

stopwatch.Stop()
printfn "Elapsed time: %ims" stopwatch.ElapsedMilliseconds

Console.ReadKey() |> ignore
Run Code Online (Sandbox Code Playgroud)

C#(16239ms)

using System;
using System.Diagnostics;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        { …
Run Code Online (Sandbox Code Playgroud)

c# benchmarking primes f#

12
推荐指数
3
解决办法
640
查看次数

如何在F#中创建从A到Z的列表

在F#中,您可以使用范围运算符创建1到10的列表,但是可以使用字母表中的字母来执行相同的操作吗?我一直在寻找一些不同的东西,但没有成功,我不想手动在程序中输入字母.

我正在寻找以下内容:

let list = [ "a" .. "z" ]
Run Code Online (Sandbox Code Playgroud)

我知道我必须以某种方式使用正则表达式,但我找不到很多关于它的信息,它似乎在F#中被称为不同的东西.

regex f# list

5
推荐指数
1
解决办法
596
查看次数

在F#中在数组中创建重复序列的最佳方法是什么?

在Python中,您可以创建数组,只需添加* n以使其重复多次.但我想知道在F#中执行此操作的最佳方法是什么,而不必使用长循环.为此使用数组,列表或序列也更好吗?我正在寻找类似下面的东西.

let array = [| 2; 3; 4; 5; 6; 7; 8; 9; 10; 10; 10; 10; 1 |] * 4 // for every suit
Run Code Online (Sandbox Code Playgroud)

最后是可以做一些像2 .. 10; 10; 10; 10; 1?谢谢.

arrays f# list sequence

3
推荐指数
2
解决办法
130
查看次数

如何在F#或C#中将像素绘制到位图而不是消除锯齿点?

我使用System.Drawing和System.Windows.Forms来绘制像素到位图,但我注意到它实际上从来不是一个像素.它更像是3x3点,边缘模糊.我怎样才能绘制一个像素?目前我正在使用bitmap.SetPixel(x, y, color).

F#

open System.Drawing

let bitmap = new Bitmap(256, 256)

for x in 0 .. 255 do
    for y in 0 .. 255 do
        bitmap.SetPixel(x, y, Color.White)
Run Code Online (Sandbox Code Playgroud)

c# plot f# system.drawing pixel

2
推荐指数
1
解决办法
85
查看次数

标签 统计

f# ×4

c# ×2

list ×2

arrays ×1

benchmarking ×1

pixel ×1

plot ×1

primes ×1

regex ×1

sequence ×1

system.drawing ×1