小编Kha*_*775的帖子

重构类摆脱开关案例

假设我有一个这样的课程来计算不同距离的不同交通方式的旅行费用:

public class TransportationCostCalculator
{
    public double DistanceToDestination { get; set; }

    public decimal CostOfTravel(string transportMethod)
    {
        switch (transportMethod)
        {
            case "Bicycle":
                return (decimal)(DistanceToDestination * 1);
            case "Bus":
                return (decimal)(DistanceToDestination * 2);
            case "Car":
                return (decimal)(DistanceToDestination * 3);
            default:
                throw new ArgumentOutOfRangeException();
        }
    }
Run Code Online (Sandbox Code Playgroud)

这很好,但是开关箱可能是维护明智的噩梦,如果我想稍后使用飞机或火车怎么办?然后我必须改变上面的课程.我可以在这里使用什么替代开关盒以及如何提示?

我想象在这样的控制台应用程序中使用它,它将从命令行运行,包含你想要使用什么样的运输工具的参数,以及你想要旅行的距离:

class Program
{
    static void Main(string[] args)
    {
        if(args.Length < 2)
        {
            Console.WriteLine("Not enough arguments to run this program");
            Console.ReadLine();
        }
        else
        {
            var transportMethod = args[0];
            var distance = args[1];
            var calculator = …
Run Code Online (Sandbox Code Playgroud)

c#

34
推荐指数
5
解决办法
7237
查看次数

混淆矩阵不支持多标签指示符

multilabel-indicator is not supported 是我尝试运行时收到的错误消息:

confusion_matrix(y_test, predictions)

y_test是一个DataFrame形状:

Horse | Dog | Cat
1       0     0
0       1     0
0       1     0
...     ...   ...
Run Code Online (Sandbox Code Playgroud)

predictions是一个numpy array:

[[1, 0, 0],
 [0, 1, 0],
 [0, 1, 0]]
Run Code Online (Sandbox Code Playgroud)

我已经搜索了一些错误消息,但还没找到我可以应用的东西.任何提示?

python numpy classification scikit-learn

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

动态添加元素到XML文件

我目前正在使用这段代码创建一个XML文件,我创建了一个对象,每次调用该方法时都会写入XML文件:

        public static void TileMapCapabilities(string title, TilePicker picker)
        {
        var dbInfo = picker.GetCapabilitiesInfo();

        TileMapObject tmo = new TileMapObject()
        {
            Title = title,
            Abstract = "",
            KeywordList = new KeywordList() {FirstLayer = ""},
            SRS = "OSGEO:41001",
            Profile = "local",
            Format = "image/png",
            BoundingBox = dbInfo.eBoundingBox,
            MapSize = dbInfo.mapSize,
            CellSize = dbInfo.cellSize,
            MaxLevel = dbInfo.level,
            Location = dbInfo.location // Not sure if this should be here. Could be practical in scenarios where the tile server is hosted locally.
        };}
Run Code Online (Sandbox Code Playgroud)

它工作正常,它可能看起来像这样:

<?xml version="1.0" …
Run Code Online (Sandbox Code Playgroud)

c# xml

10
推荐指数
1
解决办法
1030
查看次数

使用HttpListener

我有以下HTTP侦听器方法,受到MSDN使用HttpListener类的示例的启发.我对编程很新,我不知道从哪里开始从我的Main()初始化它.有什么建议?

 public static void HttpListener(string[] prefixes)
    {
        if (prefixes == null || prefixes.Length == 0)
            throw new ArgumentException("Prefixes needed");

        HttpListener listener = new HttpListener();

        foreach (string s in prefixes)
        {
            listener.Prefixes.Add(s);
        }
        listener.Start();
        Console.WriteLine("Listening..");

        HttpListenerContext context = listener.GetContext();
        HttpListenerRequest request = context.Request;
        HttpListenerResponse response = context.Response;

        string responseString = "<HTML><BODY> Test </BODY></HTML>";
        byte[] buffer = Encoding.UTF8.GetBytes(responseString);

        response.ContentLength64 = buffer.Length;
        Stream output = response.OutputStream;
        output.Write(buffer, 0, buffer.Length);

        output.Close();
        listener.Stop();
    }
Run Code Online (Sandbox Code Playgroud)

c# http

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

F#更改列表中的元素并返回完整的新列表

我有一个类型列表(string * (int * int)) list.我希望能够搜索列表,通过它的string标识符找到正确的元素,对其中一个进行计算ints,然后返回完整的修改后的列表.

例:

给出一个清单

let st = [("a1",(100,10)); ("a2",(50,20)); ("a3",(25,40))]

我正在尝试创建一个函数,它获取元素之一并从ints元组中的一个中减去数字.

get ("a2",10) st 
//Expected result: st' = [("a1",(100,10)); ("a2",(40,20)); ("a3",(25,40))]
Run Code Online (Sandbox Code Playgroud)

我觉得我差不多了,但是我对以下功能感到困惑:

let rec get (a,k) st =
    match st with
    | (a',(n',p'))::rest when a'=a && k<=n' -> (n'-k,p')::rest
    | (a',(n',p'))::rest                    -> (n',p')::get (a,k) rest
    | _                                     -> failwith "Illegal input"
Run Code Online (Sandbox Code Playgroud)

这将返回[("a2",(40,20)); ("a3",(25,40))]并因此缺少第一个a1元素.任何提示?

f#

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

从饼图中删除标签会移动图例框

我正在尝试制作饼图,并从中删除标签。目前,我正在这样做:

qx = queens_tree_types.plot(ax=axes[0], kind='pie', figsize=(8,30), legend=True, 
                            autopct='%1.0f%%', pctdistance=0.9, radius=1.2)
axes[0].set_title('Queens');
Run Code Online (Sandbox Code Playgroud)

这给了我以下派:

在此处输入图片说明

很好,但我想从图表中删除标签。当我尝试并简单地做时labels=None,我得到这张照片:

在此处输入图片说明

初始饼图的图例位置设置如下:

qx.legend(bbox_to_anchor=(2.5, 1.05),
      ncol=2, fancybox=True, shadow=True)
Run Code Online (Sandbox Code Playgroud)

但是,当我删除标签时,我似乎根本无法移动图例框。是什么赋予了?

python matplotlib pandas

3
推荐指数
1
解决办法
3259
查看次数

F#列表中基于连续的尾递归

我有这个非常简单的函数,它接受一个int并将它添加到列表的头部,并以i乘以自身递归调用:

let rec f i = function
    | []    -> []
    | x::xs -> (x+i)::f (i*i) xs

f 2 [1;2;3]
val it : int list = [3; 6; 19]
Run Code Online (Sandbox Code Playgroud)

现在,我试图用延续来重写它,但我有点卡住了.这是我到目前为止所提出的:

let fC i l =
    let rec loop cont = function
        | []    -> []
        | x::xs -> cont(x+i)::loop (fun acc -> (acc*acc)) xs
    loop id l

fC 2 [1;2;3] //Expected [3;6;19]
val it : int list = [3; 16; 25]
Run Code Online (Sandbox Code Playgroud)

对我做错了什么提示?

recursion f#

3
推荐指数
1
解决办法
195
查看次数

ASP MVC 图像上传错误“输入不是有效的 Base-64 字符串”

我有这个表格,我正在尝试上传图像。当我点击提交按钮时,出现以下错误:

“输入不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符中包含非法字符。”

永远无法到达控制器,因为我上传图像后就会发生错误。我不知道该怎么办。任何帮助表示赞赏!

@using (Html.BeginForm("Create", "Create", FormMethod.Post, new { enctype = "multipart/form-data"})) 
{
    @Html.AntiForgeryToken()

    <div class="form-group">
        <div class="col-md-10">
            @Html.LabelFor(model => model.ComponentModel.Image, htmlAttributes: new {@class = "control-label col-md-2"})
            <a class="btn" href="javascript:;">
                Choose File...
                <input type="file" name="Image" Size="40" style="position: absolute; z-index: 2; top: 0; left: 0; filter: alpha(opacity=0); opacity: 0; background-color: transparent; color: transparent"
                       onchange='$("#upload-file-info").html($(this).val());'/>
            </a>
            <span class="label label-info" id="upload-file-info"></span>
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default"/>
        </div>
    </div>
}
Run Code Online (Sandbox Code Playgroud)

更新:

这是创建控制器:

    [AcceptVerbs(HttpVerbs.Post)] …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc base64 image-upload

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

给定(a*b)列表,返回(a*b列表)列表

也许是一个时髦的标题,但我遇到以下问题:

给定一个类型列表(a * b) list,我想创建一个带有类型的新列表(a * b list) list.一个例子:

给定列表let testList = [(1,"c");(2,"a");(1,"b")],我的函数应该返回[(1, ["c";"b"]; (2, ["a"])].

我有以下内容,但我有点坚持如何继续:

let rec toRel xs =
    match xs with
    | (a,b)::rest -> (a,[b])::toRel rest
    | _           -> []
Run Code Online (Sandbox Code Playgroud)

f# list

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

F#使用高阶函数匹配递归调用的结果

给定一个简单的函数,我们在递归调用的结果上进行模式匹配,例如:

let rec sumProd = function
    | []      -> (0,1)
    | x::rest -> let (rSum,rProd) = sumProd rest
                 (x + rSum,x * rProd)

sumProd [2;5] //Expected (7, 10)
Run Code Online (Sandbox Code Playgroud)

我将如何使用更高阶函数将其更改为某些内容,例如foldBack

let sumProdHigherOrder lst = 
    List.foldBack (fun x acc -> (acc + x, acc * x)) lst (0,0)
Run Code Online (Sandbox Code Playgroud)

上面看起来几乎就像这样做,但调用它会给出错误: The type 'int' does not match the type 'int * int'

sumProdHigherOrder [2;5] //Expected (7, 10)
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

f#

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