我认为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) 在F#中,您可以使用范围运算符创建1到10的列表,但是可以使用字母表中的字母来执行相同的操作吗?我一直在寻找一些不同的东西,但没有成功,我不想手动在程序中输入字母.
我正在寻找以下内容:
let list = [ "a" .. "z" ]
Run Code Online (Sandbox Code Playgroud)
我知道我必须以某种方式使用正则表达式,但我找不到很多关于它的信息,它似乎在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?谢谢.
我使用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)