相关疑难解决方法(0)

从IList <string>或IEnumerable <string>创建逗号分隔列表

从一个IList<string>或多个IEnumerable<string>?创建逗号分隔的字符串值列表的最简洁方法是什么?

String.Join(...)上的操作string[],从而可能是麻烦的与当类型,如工作IList<string>IEnumerable<string>不能容易地被转换成一个字符串数组.

c# string

806
推荐指数
12
解决办法
57万
查看次数

C#中的管道转发

继续在C#中表达F#想法的调查,我想要一个管道前进算子.对于包含在IEnumerable中的任何东西,我们已经拥有它,因为你可以.NextFunc()到你心中的内容.但是,例如,如果最后有任何类似折叠的缩减,则无法将其结果输入函数.

这里有两种扩展方法,我想知道是否有其他人试过这个,如果这是个好主意(编辑:现在有了Earwicker的可能包括在内):

public static void Pipe<T>(this T val, Action<T> action) where T : class
{ if (val!=null) action(val); }

public static R Pipe<T, R>(this T val, Func<T, R> func) where T : class where R : class
{ return val!=null?func(val):null; }
Run Code Online (Sandbox Code Playgroud)

然后你可以写下这样的东西:

Func<string, string[]> readlines = (f) => File.ReadAllLines(f);
Action<string, string> writefile = (f, s) => File.WriteAllText(f, s);

Action<string, string> RemoveLinesContaining = (file, text) =>
    {
        file.Pipe(readlines)
            .Filter(s => !s.Contains(text))
            .Fold((val, sb) => sb.AppendLine(val), …
Run Code Online (Sandbox Code Playgroud)

c# f# functional-programming

24
推荐指数
2
解决办法
7926
查看次数

将分隔符添加到要显示的项目列表中

我有一个项目列表,我想在C#中用它们之间的分隔符显示.使用普通的迭代器,我会在开头或结尾处添加一个额外的分隔符:

string[] sa = {"one", "two", "three", "four"};
string ns = "";
foreach(string s in sa)
{
    ns += s + " * ";
}
// ns has a trailing *:
// one * two * three * four * 
Run Code Online (Sandbox Code Playgroud)

现在我可以使用for循环来解决这个问题:

ns = "";
for(int i=0; i<sa.Length; i++)
{
    ns += sa[i];
    if(i != sa.Length-1)
        ns += " * ";
}
// this works:
// one * two * three * four
Run Code Online (Sandbox Code Playgroud)

虽然第二种解决方案有效,但看起来并不优雅.有一个更好的方法吗?

c# algorithm

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

标签 统计

c# ×3

algorithm ×1

f# ×1

functional-programming ×1

string ×1